这是我问题中最简单的例子:
#include<stdio.h>
int main() {
printf("%s:%s\n", "I am in file" __FILE__);
}当我忘记在"__FILE__“宏之前插入逗号时,我希望得到一个编译错误,但只需要得到一个警告。因此,输出将是:
我正在做文件测试。
有人能告诉我为什么这不是编译错误吗?
发布于 2017-07-26 07:18:33
虽然编译器可以在例如printf和scanf (因为它知道这些函数的格式-字符串)中这样做,但通常不能对变量参数函数这样做。
如果您创建了vararg函数,编译器如何知道多少参数是正确的?答案是它不能,因此C规范没有说它必须是一个错误。
编译器(一些编译器,而不是所有编译器)对printf和scanf发出警告仅仅是因为编译器的创建者足够好地添加它。这不是必需的。
https://stackoverflow.com/questions/45319887
复制相似问题