c - #定义变量作用域

标签 c scope c-preprocessor

我想知道是否有一种方法可以从我的主函数中定义一个具有特定实例名称的全局变量?我必须按位值访问数组,为此我需要键入:

state.reg[ 4 * mc_binary[ 18 ] + 2 * mc_binary[ 17 ] + 1 * mc_binary[ 16 ] ]

我可以:

#define state.reg[ 4 * mc_binary[ 18 ] + 2 * mc_binary[ 17 ] + 1 * mc_binary[ 16 ] ] registerA

state 是我在主函数中使用的 stateType 结构的实例吗?

最佳答案

这是我推荐的:

#define BIT_INDEX3(bit2, bit1, bit0) \
    (4 * (bit2) + 2 * (bit1) + (bit0))

// use in code:
    state.reg[ BIT_INDEX3(mc_binary[18], mc_binary[17], mc_binary[16]) ]

你不想变得棘手,但如果你经常从同一个数组中提取(就像你在这里所做的那样),你可以为此做另一个定义:

#define BIT_INDEX_ARRAY3(a, i2, i1, i0) \
    BIT_INDEX3((a)[i2], (a)[i1], (a)[i0])


// use in code:
state.reg[ BIT_INDEX_ARRAY3(mc_binary, 18, 17, 16) ]

关于c - #定义变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14657734/

相关文章:

C 发送虚拟整数作为没有变量定义的引用指针

为单个线程创建信号处理程序

java - JNI C 反射谜题

javascript - 访问 jQuery 内部的 javascript native "this"

c - 如何检测extern "C"生效

C long unsigned int 数字操作

javascript - 术语 "global property"和 "global variable"是同义词吗?

c++ - 具有非恒定大小的字符串数组的模棱两可的编译?

c++ - 有没有更好的方法来通过模板用预先计算的值填充数组(用于运行时)?

c++ - 如何在 Linux 上关闭 gcc 预处理器?