我遇到了这段代码,不确定#reg
是在做什么:
#define FPGA_WRITE(reg,val) do { printf("%-20s %08X <<- %08lX\n", #reg, (reg), (unsigned long)(val));} while (0)
int main()
{
FPGA_WRITE(10,15);
return 0;
}
这将打印以下内容:
10 0000000A <<- 0000000F
如果我去掉
#
,执行代码时会出现段错误。很奇怪。那么#
的用法是什么?
FPGA_WRITE(10,15)
经过预处理后变成了do { printf("...","10",(10),...); } while(0)
。 - pmgint
值 10 当做char*
来 printf,这是未定义的行为。 - dan04#define
中的那个吧? - Christian Gibbonsint a = 42; char v[] =#a /*不是“42”!错误!*/;
- pmg#
作为预处理器而非“语言”功能,在C语言“运算符”表格中很少被提及。 - dan04