不带任何格式说明符将字符串文字作为参数传递给打印函数?
为什么我没有收到错误,即使我没有传递任何格式说明符,而是传递了一个字符串文字。在字符串文字的情况下没有错误,但在字符,整数的情况下有错误。为什么 ?
#include<stdio.h>
int main()
{
printf("Hello World");
return 0;
}
回答
的第一个参数printf应该是格式字符串1。"Hello World"是格式字符串2。
根据 C 2018 标准中的第 7.21.6.1 3 段,格式字符串由零个或多个指令组成:
- 一个
%字符开始一个转换规范的指令。 - 任何其他字符都是输出该字符不变的指令。
所以"Hello World"是一个格式字符串,它说打印“H”、“e”、“l”、“l”、“o”、“ ”、“W”、“o”、“r”、“l”和“ d”。它只是一个只有普通字符的格式字符串,没有转换规范。它是 的第一个参数的正确类型和数据printf,因此不会发生错误。
相反,当 a charorint作为第一个参数传递给 时printf,编译器知道它是该参数的错误类型并发出警告或错误消息。
脚注
1从技术上讲,参数应该是指向格式字符串第一个字符的指针。
2 "Hello World"作为指针传递,因为虽然它是一个字符数组,但它会自动转换为指向其第一个字符的指针。