我正在使用VisualDSP ++ v.5.0修改Blackfin处理器的一些代码。我注意到这个项目中的所有头文件都使用以下约定:
#ifdef _LANGUAGE_C
/* All of the code associated with this header file. */
#endif
在搜索此编译器的文档后,我发现了以下内容:
_LANGUAGE_C - 始终定义为1。
所以我的问题是双重的。
#ifdef _LANGUAGE_C
的目的是什么? _LANGUAGE_C
定义宏的其他编译器上运行吗?答案 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)。