printf("%d",x) 如何工作/解释?

Mar*_*ane 4 c c++ printf

我想知道具体printf("%d",x)是如何解释的。我只知道编译器保留一个内存来放置'%', '%d''\0'并将其地址返回到,然后根据我们指定的格式说明符printf打印第二个参数。x

那么,如果我使用 example int x=5; char *p="%d"; printf(p,x),它与 是一样的吗printf("%d",x)

chu*_*ica 5

又是如何printf("%d",x)解释的呢?

OP 的解释是代码的一种潜在的部分描述。

然而,C 和 C++ 通常是编译的,而不是解释的。今天的编译器可以检查printf("%d",x)并发出类似print_an_integer(x);.


对于 OP 的示例,两个代码在功能上是相同的,但编译器可能无法识别上述第一个代码的优化潜力。

int x=5;
// In C++, should be `const char *p="%d";`
char *p="%d";
printf(p,x);
// same as ????
printf("%d",x);
Run Code Online (Sandbox Code Playgroud)

相反,会处理传递给的格式字符串printf(),查找要打印的字符并打印说明符。打印说明符依次获取下一个参数并相应地处理它们。

如果格式字符串和参数不匹配(例如printf("%f",x)or )p="%d"; printf(p, 5.0),则结果是未定义的行为


...具体如何...

编译器在形成发出的代码方面有很大的自由度。它需要满足虚拟机的等效功能要求——而不是OP的解释。任何确切的解释都取决于编译器和代码。