我试图初始化一个全局作用域的const变量,它的值正确地进行了字节交换。用ntohl()初始化一个const变量
#include <stdio.h>
#include <stdint.h>
#include <arpa/inet.h>
const uint32_t a = ntohl(0x11223344);
int main(int argc, char const *argv[])
{
printf("%08x\n", a);
return 0;
}
使用gcc失败,错误:初始化器元素不是常量。是的,好吧,所以gcc头文件将ntohl()定义为一个函数,或者定义为“do {...} while(0)”或类似的东西,这些东西在编译时无法评估。游民。
有什么我可以做到的,它会达到同样的目的吗?我需要初始化适当的结束值,我希望它是一个全局范围的const。有没有什么办法可以说服gcc做到这一点,短短的滚动我自己的类似宏的宏?
(顺便说一句,我注意到,有铿锵再用ntohl()定义,使得它可以在编译时进行评估。上面的代码示例工程完全铿锵。不幸的是我没有得到我的编译器的选择。)