首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >违反约束总是会导致诊断吗?

违反约束总是会导致诊断吗?
EN

Stack Overflow用户
提问于 2022-12-03 03:59:34
回答 1查看 49关注 0票数 1

我想知道如果我忽略了K&R函数定义中的参数声明,会发生什么,所以我尝试了以下几点:

代码语言:javascript
复制
#include <stdio.h>

void f(a) 
// int a;       <--- omitting `declaration-list` causes warning in gcc, but nothing in clang
{
    printf("%d", 9);
}

int main() 
{
    f(9);
    return 0;
}

当我用gcc 11编译它时,诊断是以警告(即warning: type of 'a' defaults to 'int')的形式发出的。但是,当我用clang 14编译它时,不会发出诊断消息。

这让我感到困惑,因为在标准中,省略declaration-list (其中包含参数声明)是一种约束冲突(按照C11 6.9.1(6)),这需要一个符合的实现来发出诊断(如C11 5.1.1.3)。那么,为什么不发出警告?我是不是误解了什么?

EN

回答 1

Stack Overflow用户

发布于 2022-12-03 04:09:56

如果使用-pedantic标志编译,clang将生成警告。

代码语言:javascript
复制
<source>:3:8: warning: parameter 'a' was not declared, defaulting to type 'int' [-Wpedantic]
void f(a) 
       ^
1 warning generated.
ASM generation compiler returned: 0
<source>:3:8: warning: parameter 'a' was not declared, defaulting to type 'int' [-Wpedantic]
void f(a) 
       ^
1 warning generated.
Execution build compiler returned: 0
Program returned: 0
9

https://godbolt.org/z/e73M1Eq8E

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

https://stackoverflow.com/questions/74663869

复制
相关文章

相似问题

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