Я пытаюсь инициализировать переменную const с глобальным охватом со значением, которое соответствующим образом заменяется байтом.Инициализация переменной const с помощью ntohl()
#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 не работает с «error: initializer element is not constant». Да, хорошо, поэтому заголовок gcc имеет ntohl(), определенный как функция, или как «do {...} while (0)» или что-то подобное, которое невозможно оценить во время компиляции. Облом.
Есть ли что-нибудь, что я могу сделать, который достигнет того же конца? Мне нужно инициализировать значение для соответствующей конечности, и я хочу, чтобы это была глобальная область. Есть ли способ убедить gcc сделать это, за исключением качки моего собственного ntohl-подобного макроса?
(Кстати, замечу, что лязг имеет ntohl() определяется таким образом, что оно может быть вычислено во время компиляции. Приведенный выше пример кода отлично работает с лязгом. К сожалению, я не получаю мой выбор составителей.)