[英]Compiling multiple C files in a program
我有以下两个文件:
在file1.c
int main(){
foo();
return 0;
}
file2.c中
void foo(){
}
我可以编译和链接这两个文件,所以file1.c
将识别foo
函数而不添加extern
?
更新了原型。
gcc file1.c file2.c throws:warning:函数foo的隐式声明。
正确的方法如下:
file1.c
#include <stdio.h>
#include "file2.h"
int main(void){
printf("%s:%s:%d \n", __FILE__, __FUNCTION__, __LINE__);
foo();
return 0;
}
file2.h
void foo(void);
file2.c
#include <stdio.h>
#include "file2.h"
void foo(void) {
printf("%s:%s:%d \n", __FILE__, __func__, __LINE__);
return;
}
output
$
$ gcc file1.c file2.c -o file -Wall
$
$ ./file
file1.c:main:6
file2.c:foo:6
$
您不需要extern
,但file1.c必须看到foo()
存在的声明。 通常,此声明位于头文件中。
要在不使用头文件的情况下添加前向声明,只需将file1.c修改为:
int foo(); // add this declaration
int main(){
foo();
return 0;
}
你可以 ,但你不应该。
使用头文件file2.h:
// file2.h
void foo(); // prototype for function foo()
然后加:
#include "file2.h"
在file1.c中
编译:
$ gcc -Wall file1.c file2.c -o foo
作为一般规则,使用头文件来定义每个模块的接口而不是依赖模块中的特殊原型更好(更强大)。 这有时被称为SPOT(单点真相)原理。
这很难看,但是使用gcc,你可以:
gcc -include file2.c file1.c
-include
是预处理器的标志,它将包含file1.c最顶部的file2.c的内容。 话虽如此,这是一个糟糕的选择,除了最简单的程序之外,它们都会被打破。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.