c - 我应该用哪种方式编译我的 C 代码?

标签 c gcc compilation

我有三个文件,test.c、foo.c、foo.h。
在 foo.c 中

#include "foo.h"

在测试.c中

#include "foo.c."  

然后当我编译我的代码时,我使用 gcc -o test test.c,它编译了。

但是,我的教授告诉我,我应该使用

#include "foo.h" 

在我的 test.c 而不是 #include foo.c 中,我应该这样编译它

gcc -o test test.c foo.c

第二种方式更受欢迎吗?如果是,为什么?这两个编译有什么区别?

最佳答案

在大多数情况下,您不应该包含源文件(除非您可能希望包含一段由单独的脚本动态生成的代码)。源文件将直接传递给编译器。仅应包含头文件。

虽然您教授建议的方式是正确的,但在这种情况下,以下方式更具教育值(value):

gcc -c test.c
gcc -c foo.c
gcc -o test foo.o test.o

前两行将每个源文件编译成目标文件,第三行并没有真正编译,只是调用链接器从 2 个目标文件中生成可执行文件。这个想法是区分编译链接,这将按照您教授建议的方式透明地执行。

关于c - 我应该用哪种方式编译我的 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15139758/

相关文章:

c - 由于 libffi 中 undefined reference ,构建 Glib 时出错

c++ - 设置一个等于自身的变量实际上在 C++ 中执行吗?

c++ - 从 float C++ 中删除与 int32_t 转换相关的警告消息

java - Maven,拒绝访问 : http://repo1. maven.org/maven2

c - Windows CMD 中的管道不适用于用 C 编写的两个程序

c++ - 如何在使用C/C++的Linux中将文件直接存储在某些连续磁盘 block 中?

c - 向 int 字符串添加前缀

c - mem 比较数组以获取匹配字节数

gcc - 关于序言/调用函数gcc intel x86的一些问题

java - 为什么这段代码在 Coderbyte 上编译而不是在本地编译?