这是示例代码:
#include <ctype.h>
int main(void)
{
isalpha("X");
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:此代码是违反约束的吗?同样,如果不执行诊断,是否是不符合的实现?
动机:即使在符合规范的代码中,多个主要编译器也不会对此代码发出警告.C11 6.5.2.2/2涵盖了传递char *给具有原型期望的函数int的约束违反.
但是,我不清楚7.1.4中允许将库函数另外定义为宏的规定是否取代了6.5.2.2/2的要求.脚注187表明宏隐藏了原型,但脚注是非规范性的.
该代码(isalpha)("X");确实提供了诊断.