У меня есть простой файл cpp в среде Unix:
#include <stdio.h>
#ifndef HELLO
#define HELLO "hello"
#endif
int main()
{
printf("HELLO = %s \n", HELLO);
return 0;
}
Если он был скомпилирован и запущен, он распечатает HELLO = HELLO
.
Однако, когда я экспортирую HELLO="HELLO"
, а затем компилирую программу с использованием g++ -Wall -g -DHELLO
, я получаю предупреждение:
warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘int’ [-Wformat=] printf("HELLO = %s \n", HELLO);
Когда я запускаю программу, я получаю ошибку сегментации.
Как мне напечатать -DHELLO
в коде?
-DHELLO
эквивалентно#define HELLO 1
, поэтому вы получаете неправильный код. Вам нужно сделать'-DHELLO="hello"'
(вы можете проверить это, напрямую вызвав препроцессорcpp
:echo 'HELLO' | cpp -DHELLO
) - person myaut   schedule 03.10.2017