gcc 循环条件和#define

lh80um4z  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(34)

我有一个bin数据表,用于示例目的:

static const unsigned char test_bin[28800] = {0};

#define TEST_DATA_COLUMNS 2
#define TEST_DATA_ROWS (sizeof(test_bin)/sizeof(float)/TEST_DATA_COLUMNS);    
static const float (* test_data)[TEST_DATA_COLUMNS] = (const float (*)[TEST_DATA_COLUMNS]) test_bin;

字符串
这在error: expected expression before ';' token中失败:

for(size_t i = 0; i < TEST_DATA_ROWS ; i++);


但这一工作

size_t nrows = TEST_DATA_ROWS;
for(size_t i = 0; i < nrows ; i++);


为什么?为什么?
godbot for quick testing

liwlm1x9

liwlm1x91#

问题在于TEST_DATA_ROWS的define结尾处的尾随分号

#define TEST_DATA_ROWS (sizeof(test_bin)/sizeof(float)/TEST_DATA_COLUMNS);
                                                                         ^

字符串
这意味着预处理器为循环生成以下内容

for(size_t i = 0; i < (sizeof(test_bin)/sizeof(float)/TEST_DATA_COLUMNS); ; i++)
                                                                        ^ ^


从define的末尾删除;可以解决问题。

相关问题