我正在尝试使用适当字节交换的值初始化全局范围的 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)”或类似的东西,在编译时无法评估。真可惜。
我能做些什么来达到同样的目的吗?我需要为适当的结束性初始化值,并且我希望它是一个全局范围的常量。除了滚动我自己的类似 ntohl 的宏之外,有没有办法说服 gcc 这样做?
(顺便说一句,我注意到 clang 定义了 ntohl() 以便可以在编译时对其进行评估。上面的代码示例与 clang 完美配合。不幸的是,我没有选择编译器。)