c - #if 为预处理器指令定义字符串比较

标签 c pointers directive string-comparison preprocessor

我正在尝试使用预处理器指令定义一个具有可变大小的数组。该数组根据#define 进行填充:

#define PORTA                (*(PORT_t *) 0x0400)
#define EXP_GPIO0_PORT        PORTA
#define EXP_GPIO0_PIN         0

我想用 :

填充数组
const uint8_t PortAGpiosPortpinUsed[] =
{
    #if EXP_GPIO0_PORT == PORTA
    EXP_GPIO0_PIN,
    #endif
}

由于 PORTA 是一个指针,编译器 (GCC) 不允许这种预处理器语法。有什么解决办法让它工作吗? 谢谢 锡尔

最佳答案

也许像这样的东西会起作用:

#ifdef PORTA 
#define ADDRESS               (*(PORT_t *) 0x0400)

#define EXP_GPIO0_PORT        ADDRESS
#define EXP_GPIO0_PIN         0
#endif

const uint8_t PortAGpiosPortpinUsed[] =
{
    #ifdef PORTA
    EXP_GPIO0_PIN,
    #endif
}

当然,这需要 PORTA 是先前定义的

关于c - #if 为预处理器指令定义字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55406110/

相关文章:

c++ - 阻止编译器在具有遗留 C 代码的 C++ 代码中生成错误

c - 将静态结构添加到作为函数参数的数组

c++ - 获取进程的基地址

javascript - 是否使用了指令的链接函数的返回值?

javascript - 如何理解AngularJS中指令的scope属性?

c 这个 while 循环完成的顺序是什么?

c - C 中的不可整子集 Hackerrank 解决方案

c - 调整权限 SE_DEBUG_NAME

c++ - 简单、高效的弱指针,在释放目标内存时设置为 NULL

dynamic - 调用COBOL程序的默认模式是什么?静态还是动态?