как печатать предопределенные cflags

У меня есть простой файл 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 в коде?


person Byung Kim    schedule 02.10.2017    source источник
comment
-DHELLO эквивалентно #define HELLO 1, поэтому вы получаете неправильный код. Вам нужно сделать '-DHELLO="hello"' (вы можете проверить это, напрямую вызвав препроцессор cpp: echo 'HELLO' | cpp -DHELLO)   -  person myaut    schedule 03.10.2017


Ответы (1)


-DHELLO эквивалентно #define HELLO 1, что объясняет ошибку компиляции, которая жалуется на int, а не на char*.

Попробуйте скомпилировать так:

g++ -Wall -g -DHELLO="hello"
person gsamaras    schedule 03.10.2017