【问题标题】:Checking if a given string is #define in C检查给定字符串是否是 C 中的#define
【发布时间】:2020-05-03 04:03:41
【问题描述】:

我正在尝试检查给定的字符串是否为 #define:
编辑: 我正在读取一个文本文件,其中包含要复制的令牌名称和文本列表,每行一行,然后检查文件中读取的令牌名称是否已经是#define。如果定义了标记,那么它下面的“复制文本”将被复制到程序中的字符串中。如果没有,那么它将跳过“复制文本”。 下面的代码只是我如何检查令牌名称(如果已定义)的一个 sn-p:

#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。
输出:

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

我想知道我的检查是否错误。
如果它是#define,还有其他方法可以检查字符串吗? 谢谢

【问题讨论】:

  • 很确定这一切只是检查是否定义了TEST_1。
  • 我该怎么做才能让它处理 TEST_1 的值?
  • 你可以说#ifdef TOKEN_A
  • 还有其他方法吗?因为我将令牌名称放入了一个字符串中,这样我就可以在运行时更改它。这样我就可以动态检查一个字符串是否已定义。
  • 问题是#define 和#ifdef 在运行时不存在。它们只存在于编译期间。

标签: c c-preprocessor


【解决方案1】:

这样做并不现实。原因是#define 是一个预处理指令,在运行时不会存在。它在预处理器将预处理代码传递给 c 编译器的主体时消失。

【讨论】:

    猜你喜欢
    • 2020-12-11
    • 1970-01-01
    • 2013-04-29
    • 2018-05-23
    • 2013-12-28
    • 2019-06-11
    • 2015-10-02
    • 1970-01-01
    • 2022-06-29
    相关资源
    最近更新 更多