#define没有令牌且没有C中的#ifdef的标识符

时间:2015-01-30 05:28:57

标签: c++ token c-preprocessor

我的C / C ++项目中有类似的代码,我想知道#define在这里的使用,因为它没有值,也没有#ifdef或{{ 1}}宏来检查它作为一个条件。只需在代码中提到标识符,然后函数就会执行。

#ifndef

我想清楚地了解这里使用的#define SDRAM #define ROM SDRAM int setup() { ----- ----- --- } SDRAM void sample() { ----- ----- ---- } 。请帮帮我

4 个答案:

答案 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,但emitslotmoc(解析用户)非常有用-supplied Qt C ++源代码)。

另一个示例GTY( ... )useful编译器源代码中非常GCC,其中包含#define GTY(X)来忽略它,因为GTY

处理gengtype注释

答案 2 :(得分:1)

我已经看到用于代码生成的定义。例如,在Qt框架中,这些在预构建步骤中被解析以生成反射代码。

答案 3 :(得分:0)

没有任何标识符的

#define太常见了。

  1. #define没有任何标识符的常量作为标记 预处理器。

    #define SOMETHING
    #ifdef SOMETHING
    //Do something if SOMETHING is defined.
    #else
    //Do something if SOMETHING is not defined.
    #endif
    
  2. #define将原始定义的常量替换为标识符,因此,如果您尚未定义标识符,则替换为空

  3. 没有标识符的
  4. #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常量SDRAMROM将在编译代码时替换为 nothing 。换句话说,就好像您已删除了SDRAMROM,因为它们替换为空。