【发布时间】:2020-03-07 03:40:30
【问题描述】:
我正在尝试根据 #define 指定 sscanf() 调用中变量的宽度,该 #define 根据另一个 #define 计算其值。
当 TEST 定义只是一个数字时它可以工作,但是当它变成一个计算时,代码会失败。让 TEST 调用另一个包含计算的函数也不起作用。
我正在使用的代码:
#include <stdio.h>
#define A 3
#define TEST FUN()
#define FUN() (A + 2)
#define STR(X) _STR(X)
#define _STR(x) #x
int main()
{
char input[] = "Test123";
char output[10];
sscanf(input, "%" STR(TEST) "s\n", output);
printf("%s\n", output);
return 0;
}
我在这里错过了什么?
【问题讨论】:
-
预处理器不做任何算术运算,它基本上是一个简单的搜索和替换。
-
我认为
input和output在代码中被交换了。目标字符串,在scanf中,是第一个参数。 -
1) 它是在编译阶段还是在运行时归档? 2) 你得到什么输出?
-
您可以将 variable 视为通过命令行参数或作为函数的变量参数传入的东西。但是宏是经过预处理的,在运行时不会发生变化。
-
一切都在编译时就知道了
标签: c c-preprocessor preprocessor