C 中的条件 #define

标签 c macros

我想用 C 语言编写一个由参数控制的条件定义。

类似这样的事情:

#define RTL_REG(reg_name,inst)     \
    inst == 0 ? DUT_0_##reg_name : \
    inst == 1 ? DUT_1_##reg_name : \
    inst == 2 ? DUT_2_##reg_name : \
    inst == 3 ? DUT_3_##reg_name : \
    DUT_0_##reg_name

但是代码没有按照我想要的方式工作。本质上,它是用 inst 的值替换定义。

我要寻找的是:

RTL_REG(CLK_EN,0) -> *DUT_0_CLK_EN*

RTL_REG(CLK_EN,1) -> *DUT_1_CLK_EN*

我得到了什么:

RTL_REG(CLK_EN,0) -> 0

你们一些 C 语言专家可以帮我吗?

注意: 尝试在定义的开头和结尾处添加 () ,但同样,“(”出现在定义替换中!

最佳答案

你可以这么做

#define RTL_REG(reg_name,inst) DUT_##inst##_##reg_name

## 用于连接两个标记。请参阅this .

关于C 中的条件 #define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51224158/

相关文章:

c - 关于 sizeof() 和分配的内存

c - 用C语言用哪个数据库最方便?

c - 是否应该使用宏而不是灵活的数组成员?

c++ - 具有X类,如何将X作为模板参数传递给自身?

c - 如何使用 DotNetBrowser 捕获验证码图像对象

c++ - Linux 编程接口(interface)中的信号处理程序示例

c - 为什么我可以分配一个超出其范围的 int 值?

macros - 创建除某些特定变量之外的所有变量的列表

c++ - 在 C++ 中更智能的包含保护以在不同的命名空间中多次包含头文件

macros - 有什么方法可以将 match 语句的主体与 Rust 宏相匹配吗?