2301_80554905 2024-04-15 23:40 采纳率: 0%
浏览 270

为什么头文件声明了函数,但调用不了

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

img

img

img

img

img

  • 写回答

8条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-15 23:40
    关注

    引自免费微信小程序:皆我百晓生

    在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中的函数调用对应起来。

    如果你仍然遇到问题,确保你使用了正确的编译命令,并且所有的源文件都在同一个目录下。另外,记得检查是否存在拼写错误、遗漏的分号或其他语法错误,这些都可能导致编译失败。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月15日