我的C / C ++项目中有类似的代码,我想知道#define
在这里的使用,因为它没有值,也没有#ifdef
或{{ 1}}宏来检查它作为一个条件。只需在代码中提到标识符,然后函数就会执行。
#ifndef
我想清楚地了解这里使用的#define SDRAM
#define ROM
SDRAM
int setup()
{
-----
-----
---
}
SDRAM
void sample()
{
-----
-----
----
}
。请帮帮我
答案 0 :(得分:2)
可能允许在以后添加属性和说明符,即将来int functionname()
可能正常,或者在使用其他编译器进行编译时可能需要__declspec(boomshakala) int functionname()
之类的内容。然后,只需调整适当的#define而不是使用多个函数声明进行调整(因此您只需将#define SDRAM
更改为#define SDRAM __declspec(boomshakala)
,而不是更改{{1}的声明它可能也用于只有一次编译所需的属性,因此可以在命令行上为该编译提供#defines。这样的事情通常用setup
来完成。}和sample
。和dllimport
,其中每个声明所需的属性取决于是否正在编译dll或使用dll的应用程序。
答案 1 :(得分:1)
它可能用作一些注释。也许某些工具或脚本正在扫描C源以使用它。或许它可能是遗留物。
例如,Qt包含#define emit
和#define slot
,但emit
和slot
对moc
(解析用户)非常有用-supplied Qt C ++源代码)。
另一个示例GTY(
... )
在useful编译器源代码中非常GCC,其中包含#define GTY(X)
来忽略它,因为GTY
gengtype
注释
答案 2 :(得分:1)
我已经看到用于代码生成的定义。例如,在Qt框架中,这些在预构建步骤中被解析以生成反射代码。
答案 3 :(得分:0)
#define
太常见了。
#define
没有任何标识符的常量作为标记
预处理器。
#define SOMETHING
#ifdef SOMETHING
//Do something if SOMETHING is defined.
#else
//Do something if SOMETHING is not defined.
#endif
#define
将原始定义的常量替换为标识符,因此,如果您尚未定义标识符,则替换为空。
#define
也会在头文件中用作保护块,以防止同一个编译单元多次包含相同的头文件。
//something.h
#ifndef SOMETHING_H //We have not yet included something.h, hence SOMETHING_H is undefined.
#define SOMETHING_H //We have defined SOMETHING_H to show that something.h is included.
//Code
#endif
在您的情况下,#define
d常量SDRAM
和ROM
将在编译代码时替换为 nothing 。换句话说,就好像您已删除了SDRAM
和ROM
,因为它们替换为空。