【问题标题】:#Define Variables Scope#定义变量范围
【发布时间】:2013-01-17 10:34:11
【问题描述】:

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

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 是我在 main 函数中使用的 stateType 结构的实例?

【问题讨论】:

  • 所以你试过了,发生了什么?你的队友再也看不懂代码了?
  • 我没有队友。我不是想让它工作,我已经完成了该程序,但回顾它,我想知道这是否可能或功能等效的方法。
  • 如果您认为该行太长,请将其拆分为多行,而不是删除语义正确的文档格式。
  • 请停止编辑我的帖子。您看不到定义语句的第二部分。我知道它看起来更漂亮,但请停下来。

标签: c scope c-preprocessor


【解决方案1】:

这是我的建议:

#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) ]

【讨论】:

  • 谢谢,我正在通过使用 OpenCL 来学习宏定义和其他预处理器的优势。只是想尝试他们的潜力。再次感谢您的回答!
猜你喜欢
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多