在VisualDSP ++中使用#ifdef _LANGUAGE_C的目的是什么?

时间:2012-06-13 23:44:48

标签: c compiler-construction embedded

我正在使用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定义宏的其他编译器上运行吗?

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

它被称为编译常量,必须将此编译常量添加到构建环境中,您应该检查构建环境。它是告诉编译器它要编译的代码是用C特定的检查编译的,并根据它生成outfut文件(hex或bin)。