【问题标题】:Source file can't see a define from other header源文件看不到来自其他标头的定义
【发布时间】:2023-03-06 08:20:01
【问题描述】:

我有一个自定义头文件 ("strings.h"):

#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
#include "sdkGlobal.h"

#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */

#if !defined administration_H_
#define administration_H_

#define POS_STR_TITLE_OPERATIONS "somestr"

#endif

在我拥有的一个源文件中:

#include "../inc/strings.h"

在我使用时的代码中:

    sdkShow (LINE3, 0, POS_STR_TITLE_OPERATIONS );

我得到错误:

src/main.c: In function 'postMainMenu':
src/main.c:190: error: 'POS_STR_TITLE_OPERATIONS ' undeclared (first use in this function)
src/main.c:190: error: (Each undeclared identifier is reported only once
src/main.c:190: error: for each function it appears in.)
make[1]: *** [src/main.o] Error 1
make: *** [all] Error 2

有什么想法吗?

【问题讨论】:

  • 您是否尝试过明确指定头文件的路径?你的代码在哪个目录执行?

标签: c header-files c-preprocessor undeclared-identifier


【解决方案1】:

保护应该总是反映要保护的头文件的名称,所以它应该是“strings_H_”和“sdkGlobal_H_”

它适用于头文件具有自己依赖关系的更大产品。例如 "a.h" 需要 "length.h" 而 "b.h" 也需要 "length.h",你保护 "length.h" 被评估一次。

【讨论】:

  • 是的,这似乎是问题所在。我必须阅读更多关于包括警卫等的信息,因为我似乎对这些概念不是很“最新”:)
【解决方案2】:

看来administration_H_已经定义好了。所以而不是

#if !defined administration_H_
#define administration_H_

#define POS_STR_TITLE_OPERATIONS "somestr"

#endif

你想要的

#if !defined administration_H_
#define administration_H_
#endif

#if !defined POS_STR_TITLE_OPERATIONS
#define POS_STR_TITLE_OPERATIONS "somestr"
#endif

【讨论】:

  • 我可以尝试一下,但在我以前使用函数声明而不是 #define POS_STR_TITLE_OPERATIONS 之前,一切似乎都很好..
  • @UmNyobe:它似乎是这样工作的,但你能解释一下为什么在我以前有函数声明而不是之前的 #define POS_STR_TITLE_OPERATIONS 时它可以工作吗?
  • 保护应该总是反映要保护的头文件的名称,所以它应该是“strings_H_”和“sdkGlobal_H_”
  • 我通过更改为string_H_ 并保持原样(在我的问题中)解决了这个问题
  • @Adriano 许多程序员(包括我)在阅读此代码时不会将administration_H_ 视为警卫,因为它位于名为strings.h 的头文件的中间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多