Проверка, является ли данная строка #define в C - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь проверить, является ли данная строка #define:
РЕДАКТИРОВАТЬ: Я читаю текстовый файл, который содержит список имен токенов и текст для копирования, строка за строкой, а затем проверка, является ли имя токена, прочитанное в файле, уже #define. Если токен определен, то «копируемый текст» будет скопирован в строку в программе. Если нет, то он пропустит «копировать текст». Приведенный ниже код является просто фрагментом того, как я проверял имя токена, если оно определено:

#define TOKEN_A 1
#define TEST_1(x) x

int main(){

    char *str = "TOKEN_A";
    #ifdef TEST_1(str)
    printf("TOKEN_A is Defined!\n");
    #else
    printf("TOKEN_A is not Defined!\n");
    #endif

    char *str1 = "TOKEN_B";
    #ifdef TEST_1(str1)
    printf("TOKEN_B is Defined!\n");
    #else
    printf("TOKEN_B is not Defined!\n");
    #endif
}

Пример содержимого текстового файла:

 TOKEN_A
 copy text
 TOKEN_B
 copy text

Оба результата #ifdef верны, хотя TOKEN_B не определен.
OUTPUT:

"TOKEN_A is Defined!"
"TOKEN_B is Defined!"

Мне было интересно, если моя проверка неверна.
Есть ли другой способ проверить строку, если она #define? Спасибо

1 Ответ

0 голосов
/ 03 мая 2020

Это нереально практично. Причина в том, что #define является директивой препроцессора и не будет существовать во время выполнения. Он исчезает при передаче препроцессором предварительно обработанного кода в основную часть компилятора c.

...