【问题标题】:use definitions in loop (c coding)在循环中使用定义(c 编码)
【发布时间】:2015-05-22 08:47:45
【问题描述】:

我有类似的定义

#define COLUMN1  1
#define COLUMN2  2
#define COLUMN3  a
#define COLUMN4  b

我想循环使用它们

for (int var = 0; var < 3; ++var) {
    if(COLUMNvar) .... ; // var
}

我可以这样做吗:

int col[4]={COLUMN1, COLUMN2, COLUMN3, COLUMN4};
for (int var = 0; var < 3; ++var) {
    if(col(var)) .... ; // var
}

【问题讨论】:

  • 我必须使用 definiton 来考虑内存 :)
  • 你的意思是#define COLUMN3 'a'
  • @SaimGokkoyun:这不是它的工作方式。它不会为您节省任何费用。您保存在 .bss 或 .data 段中的内容只会添加到 .text 段中(值必须放在 somewhere)。但是,如果您使用 int const xxx[] 数组,它将在 .rodata 或 .text 段中结束,并且也不会消耗 RAM。
  • 实际上 COLUMNS 正在引用端口定义。它们是 32 位值。

标签: c arrays for-loop macros


【解决方案1】:

如果你改变了

#define COLUMN3  'a'
#define COLUMN4  'b'

并使用类似

int col[4]={COLUMN1, COLUMN2, COLUMN3, COLUMN4};
for (int var = 0; var < 4; ++var) 
{
    if(col[var])
    {
       .... ; // var //do something
    } 
}

你应该语法上没问题。

【讨论】:

    【解决方案2】:

    你不能这样做,因为define(宏)值被预处理器替换,这是在编译器构建你的代码之前完成的。

    您必须使用ifelse 语句检查switch

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多