我正在使用 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
定义宏的不同编译器上运行吗?您必须查看它在上下文中的使用方式,但我相信在这种情况下,它在 C 代码和汇编程序中使用的标头中使用,其中汇编程序代码使用 C 预处理器。它允许 C 头文件包含在汇编代码中,并让预处理器删除 C 代码特定元素。
例如,在汇编代码中具有与 C 代码相同的
#define ...
常量宏值可以避免重复和不一致,但是 struct
定义或函数原型是没有意义的。
我希望也许:
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
,但是如果文档说它总是被定义的,那么也许在你的情况下它是为 C 和 C++ 编译定义的。
要回答您的复合问题,大多数情况下答案是肯定的。这是一些预处理器指令的一部分,允许您使用相同的代码针对不同的环境进行构建。例如,如果您查看 Windows 驱动程序工具包,您会发现到处都使用了此约定,以确保根据目标环境和编译器构建最有效的代码。我希望这有帮助。可能会在 #ifdef 之后添加代码,并在其中添加另一个 _LANGUAGE_CPP 代码,并将 C++ 特定代码放入其中等等。
它被称为编译常量,这样的编译常量必须添加到您的构建环境中,您应该检查您的构建环境。它告诉编译器,它将要编译的代码将使用 C 特定检查进行编译,并将根据情况生成输出文件(hex 或 bin)。