如题,初学,琢磨了半天很困惑
我发现在2.c前面加个#include "1.c"
就可以正常输出,但这没啥意义啊





关注引自免费微信小程序:皆我百晓生
在C语言编程中,当你在一个源文件(例如C2.c)中尝试调用另一个源文件(例如C1.c)中定义的函数时,你需要先在C2.c中包含相应的头文件(通常是.h文件),而不是直接包含实现函数的源文件(.c文件)。这是因为编译器在处理.c文件时会将所有函数的实现合并到一起,而不会关心这些函数是否被其他地方引用。
根据你提供的信息,看起来你已经正确地在C2.c中包含了C1.h文件,并且C1.h中声明了add函数:
// C1.h
#include<stdio.h>
int add(int a,int b);
但是你在C2.c中的函数调用部分少了一个右括号,这会导致编译错误。正确的代码应该是这样的:
// C2.c
#include<stdio.h>
#include "1.h"
int main() {
printf("%d", add(1, 2)); // 注意这里添加了右括号 )
return 0;
}
当你在命令行中执行gcc -o test C1.c C2.c(假设你的编译器是GCC,并且你想生成名为test的可执行文件)时,编译器会自动处理头文件的包含关系,找到add函数的定义,并将其与C2.c中的函数调用对应起来。
如果你仍然遇到问题,确保你使用了正确的编译命令,并且所有的源文件都在同一个目录下。另外,记得检查是否存在拼写错误、遗漏的分号或其他语法错误,这些都可能导致编译失败。