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

问题描述 投票:0回答:3

我正在使用 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
    定义宏的不同编译器上运行吗?
c embedded
3个回答
3
投票

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

例如,在汇编代码中具有与 C 代码相同的

#define ...
常量宏值可以避免重复和不一致,但是
struct
定义或函数原型是没有意义的。

我希望也许:

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


1
投票

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.