【发布时间】: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