这里是示例代码:
#include <ctype.h>
int main(void)
{
isalpha("X");
}
我的问题是:这段代码是否违反了限制条件?同样地,如果一个实现没有发出诊断,它是否不符合规范?
动机:多个主要编译器甚至在符合规范的代码中也不会对此代码发出警告。C11 6.5.2.2/2 表明将char *
传递给预期为int
的函数的原型是一种限制条件违规。
然而,我不清楚7.1.4中允许库函数被另外定义为宏的规定是否取代了6.5.2.2/2的要求。注脚187表明该宏隐藏了原型,但注脚并非正式文件。
当然,代码(isalpha)("X");
会生成一条诊断信息。
int (*ptr)(int) = isalpha;
编译可能会很有趣。 - Lundinint (*ptr)(int) = isalpha; ptr("X");
会发生什么。 - Lundin