LINUX.ORG.RU

Не токенизируется макрос через -D

 , ,


0

1
#include <stdio.h>

#ifndef TEXT
#define TEXT "Text"
#endif

int main()
{
    char text[] = { " " TEXT };

    printf("%s\n", text);
    return 0;
}
alex@alex:~/Проекты/test/macrotest$ gcc ./macrotest.c 
alex@alex:~/Проекты/test/macrotest$ ./a.out 
 Text
alex@alex:~/Проекты/test/macrotest$ gcc ./macrotest.c -DTEXT="dsdd"
./macrotest.c: In function ‘main’:
<command-line>:0:6: error: expected ‘}’ before ‘dsdd’
./macrotest.c:9:25: note: in expansion of macro ‘TEXT’
     char text[] = { " " TEXT };
                         ^
alex@alex:~/Проекты/test/macrotest$ gcc ./macrotest.c -DTEXT=dsdd
./macrotest.c: In function ‘main’:
<command-line>:0:6: error: expected ‘}’ before ‘dsdd’
./macrotest.c:9:25: note: in expansion of macro ‘TEXT’
     char text[] = { " " TEXT };

Што происходит? Почему? Как?

Ответ на: комментарий от Deleted

В первый раз было через .pro QtCreator'а, там стояло

DEFINES += TEXT="\"Text\""
В консоль улетало «Text». Так что, там надо третий слой экранации делать?

anonymous ()
Ответ на: комментарий от Deleted

Ну чо, в итоге вот так заработало:

DEFINES += MAIN_SUBPROJECT_NAME="\"\\\"Nau\\\"\""
Qt такой Qt.

someoneelsenotme ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.