首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >定义为宏的标准库函数的参数类型错误

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

Stack Overflow用户
提问于 2018-05-28 19:45:44
回答 1查看 169关注 0票数 12

以下是示例代码:

代码语言:javascript
复制
#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");确实给出了诊断。

EN

回答 1

Stack Overflow用户

发布于 2018-05-28 22:23:52

我的解释是,尽管标准要求有一个isalpha函数,但在7.1.4中,它特别允许实现另外定义一个与隐藏函数声明的名称相同的宏。

这意味着在程序中调用isalpha (而不是先使用#undef)可以导致宏展开除文字函数调用以外的内容,而6.5.2.2将需要对其进行诊断。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50565677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档