我通过以下方式遇到了一些代码
//file.c
#include <stdlib.h>
void print(void){
printf("Hello world\n");
}
Run Code Online (Sandbox Code Playgroud)
和
//file main.c
#include <stdio.h>
#include "file.c"
int main(int argc, char *argv[]){
print();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
这种编程风格有什么缺陷吗?虽然我感觉如此,但我无法弄清楚这个缺陷,因为在某处我读到将实现分离为*.h和*.c文件有助于编译器检查一致性.我不明白一致性是什么意思.
我会非常感谢一些建议.
- 谢谢
没有什么能阻止你包含.c文件.但是,分隔声明(在.h文件中)和实现(和.c文件)然后仅包含.h文件有几个优点:
编译时间.您的声明通常变化少于您的实施.如果仅包含.h文件,并对实现进行更改(在.c文件中),则只需重新编译一个.c文件,而不是包含修改后文件的所有文件.
接口的可读性和管理.您可以一目了然地查看(通常)小.h文件中的所有声明,而.c文件中填充了行和代码行.此外,它可以帮助您确定哪个文件查看哪些函数和变量.例如,避免将全局变量包含在您不想要的位置.
编译器应编译.c文件是一种常见的期望..h文件不直接提供给编译器.它们通常只包含在.c文件中.
因此,您的代码应该通过以下方式编译:
gcc main.c file.c
Run Code Online (Sandbox Code Playgroud)
而不仅仅是gcc main.c.该命令在链接阶段将失败,因为它看到重复的符号.