【问题标题】:C file cannot see variable defined in #include'd header fileC文件看不到#include'd头文件中定义的变量
【发布时间】:2018-08-28 22:02:26
【问题描述】:

a.h我有

#ifndef A_H
#define A_H 1

const int global_val = 10;

#endif

a.c 我有

#include "a.h"

int someFunc() {
    return global_val;
}

但编译器 (gcc) 在编译 a.c 时会抛出 error: 'global_int' undeclared。包含头文件怎么可能不声明呢?

【问题讨论】:

  • 是不是因为你声明了global_val并引用了global_int
  • 睡一会我的朋友。
  • 对不起,我在输入简化代码时出错了。我刚刚检查了我的实际代码,没有这样的错别字。我已经编辑了原始帖子。
  • 永远不要在头文件中定义变量!标头 onyl 应该只有变量 declarations,而不是定义。
  • 请注意,程序中只有一个源文件可以成功包含您的头文件,因为每次包含头文件时,它都会定义全局变量。如果多个文件包含标题,那么当您尝试将它们链接在一起时将会有多个定义。游戏规则在 C++ 中有所不同——但您将其标记为 C 而不是 C++。如果您觉得必须在标头中执行此操作,请将其设为static const int global_val = 10;,但如果您包含标头但不引用变量,则期望编译器会收到“未使用的变量”警告。所以,不要这样做!

标签: c global-variables header-files


【解决方案1】:

您应该有两个文件。

啊.h

  #ifndef A_H
  #define A_H 1

  extern const int global_val;

  #endif

交流

  #include "A.h"


  const int global_val = 10;

【讨论】:

    【解决方案2】:

    我发现了问题。我删除了我所有的.o.gch 和可执行文件,代码再次开始编译。我的猜测是预编译的头文件(我什至不记得做了)欺骗了编译器。

    我没有结束这个问题,而是决定留下这个答案,以防它对某人有所帮助。

    【讨论】:

    • 由于您的方法 100% 错误,我们应该保留这个答案,向读者展示不应该这样做。您已经发表了评论-不要将任何代码或数据放入头文件中!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 2023-03-12
    • 2013-07-14
    • 2014-08-04
    • 2013-08-04
    相关资源
    最近更新 更多