想象一下:

#define PUTVALUE 0x000000000000000F
#define SetStr(s) literate(s)
#define literate(s) #s

...

foo (PUTVALUE, SetStr(PUTVALUE));

我如何才能做到这一点,其中foo希望第一个参数是64位整数,第二个参数是一个常量字符串,该字符串的十六进制表示形式带有前导0x
所以我不能:
#define PUTVALUE 0x000000000000000Full

因为这会破坏第二个参数。
但不这样做就是打破第一个。

最佳答案

哦,我想出了一个很棒的办法:

foo (INT64_C(PUTVALUE), SetStr(PUTVALUE));

就是在做那个工作。

关于c - 如何使64位预处理器定义的常量在没有警告的情况下进行编译?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25766279/

10-09 08:46