使用头文件编译

标签 c compilation header-files

用以下代码编译文件 main.c:

gcc main1.c -o final

给我:

/tmp/cc1cwhAP.o: In function `main':
main1.c:(.text+0xb): undefined reference to `hi'
main1.c:(.text+0x15): undefined reference to `hi'
collect2: ld returned 1 exit status

ma​​in1.c:

#include <stdio.h>
#include "incl.h"

int main(void)
{
 hi = 1;
 printf("hi = %d",hi);
 return(0);
}

包括.h:

extern int hi;

我做错了什么? (请详细回答你的问题)

删除 extern 关键字可以解决问题,但我希望能够在其他源文件中使用 hi 变量。

最佳答案

您已经告诉编译器存在一个名为hi 的变量,但您实际上并没有定义它。

有两种方法可以解决这个问题:

  1. 在头文件的声明中删除 extern 关键字。这不好!
  2. 在源文件中声明变量。这可以是您链接到程序中的 main1.c 或另一个源文件。这是个好方法。

关于使用头文件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3976490/

相关文章:

c++ - 是否有任何现有工具可以将 c++ 头文件转换为头文件 + 实现?

c - 如何在Atollic TrueStudio中包含CMSIS-DSP header

c - 使用可用的 binaryrandom(返回 0 或 1)函数生成整数随机数

c++ - LLVM 的位码对函数参数的错误检测

c - ANSI C - 文本文件 : Modify Line?

c++ - 在编译时更改字符串宏

调用头文件中的函数

mysql_stmt_fetch() 返回 100?

c - 使用 QtCreator [mac os] 找不到 -lrt 的库

css - 为什么我的 SASS @import 转到我的 CSS @import?