У меня есть простой файл 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
Я получаю предупреждение:
предупреждение: формат «% s» ожидает аргумент типа «char *», но аргумент 2 имеет тип «int» [-Wformat =] printf ("HELLO =% s \ n", HELLO);
Когда я запускаю программу, я получаю ошибку сегментации.
Как бы я распечатать -DHELLO
в коде?
-DHELLO
эквивалентно #define HELLO 1
, который объясняет ошибку компиляции, которая жалуется на int
, а не char*
,
Попробуйте скомпилировать так:
g++ -Wall -g -DHELLO="hello"
Других решений пока нет …