GNU g ++ препроцессор / компилятор: значение printf - PullRequest
1 голос
/ 30 января 2020

Привет, я ищу решение для G CC для печати значения, которое вычисляется во время компиляции.

Прагмы сообщений есть, но они могут печатать только пользовательскую строку ввода. то, что я ищу, это вывод в стиле printf, где я могу ввести параметры.

пример

printf("hi %s, my value is %d\n", "john", 15);

пример 2: поиск решения для этого

void dummy(MyObjectReference & obj)
{
#if(sizeof(obj) != 512)
#pragma message "cannot build, your object size is not 512, it is %d", sizeof(obj)
#error "stop build"
#endif

  obj.do_stuff();

  return obj.get_result();
}

1 Ответ

4 голосов
/ 30 января 2020

Здравствуйте, я ищу решение для G CC для печати значения, которое вычисляется во время компиляции.

Вы не можете сделать это со стандартным G CC 9 .

Вы можете написать свой собственный G CC плагин , обеспечивающий, например, некоторые дополнительные #pragma (или встроенные G CC) действия, которые вы хотите .

Однако разработка такого плагина может занять несколько недель. Вам нужно будет разобраться в G CC внутренностях, чтобы закодировать этот плагин. Так что загляните в G CC ресурс центр.

С C ++ 11 или новее вы можете использовать static_assert(sizeof(obj) == 512, "bad size of obj"), который работает после предварительной обработки (но не будет отображать sizeof(obj) как целое число).

...