我試圖初始化一個全局作用域的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()定義,使得它可以在編譯時進行評估。上面的代碼示例工程完全鏗鏘。不幸的是我沒有得到我的編譯器的選擇。)