1

我正在使用 VisualDSP++ v. 5.0 修改 Blackfin 处理器的一些代码。我注意到这个项目中的所有头文件都使用以下约定:

#ifdef _LANGUAGE_C

/* All of the code associated with this header file. */

#endif

在搜索此编译器的文档后,我发现以下内容:

_LANGUAGE_C - 始终定义为 1。

所以我的问题有两个。

  1. 使用的目的是#ifdef _LANGUAGE_C什么?
  2. 这难道不会阻止您的代码在可能没有定义宏的不同编译器上运行_LANGUAGE_C吗?
4

3 回答 3

3

您必须查看它在上下文中的使用方式,但是我相信在这种情况下,它用于 C 代码和汇编器中使用的标头中,其中汇编器代码使用 C 预处理器。它允许 C 头文件包含在汇编代码中,并让预处理器删除 C 代码特定的元素。

例如,在汇编代码中具有与#define ...C 代码相同的常量宏值以避免重复和不一致是很有用的,但是例如struct定义或函数原型将毫无意义。

我可能希望:#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS),但如果文档说它总是被定义,那么在你的情况下,它可能是为 C 和 C++ 编译定义的。

于 2012-06-17T09:19:50.677 回答
1

要回答您的复合问题,大多数情况下答案是肯定的。这是一些预处理器指令的一部分,允许您使用相同的代码为不同的环境构建。例如,如果您查看 Windows 驱动程序工具包,您会发现这种约定在所有地方都被使用,以确保根据目标环境和编译器构建最有效的代码。我希望这是有帮助的。在#ifdef 之后可能会在其中添加代码,并在其中添加另一个用于 _LANGUAGE_CPP 的代码,并将 C++ 特定代码放在那里等等。

于 2012-06-13T23:51:07.403 回答
1

它被称为编译常量,这个编译常量必须添加到你的构建环境中,你应该检查你的构建环境。它是告诉编译器它要编译的代码是用 C 特定的检查编译的,并将根据它生成输出文件(十六进制或二进制文件)。

于 2012-06-14T05:35:24.453 回答