相关疑难解决方法(0)

错误的参数类型为定义为宏的标准库函数

这是示例代码:

#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");确实提供了诊断.

c language-lawyer

12
推荐指数
1
解决办法
158
查看次数

标签 统计

c ×1

language-lawyer ×1