C语言中int foo(a) int a; { return a }这类函数定义是什么含义?
问题解答
检索关键词
你可以使用 K&R C 函数定义、C 旧式函数定义 作为关键词检索相关内容。
写法含义说明
这种语法是C语言早期K&R标准阶段使用的函数定义格式,属于已废弃的过时特性,目前C新标准仅为了兼容老旧代码保留对该语法的支持,不推荐在新代码中使用。
你给出的代码:
int g(a,b,c,d) int a,b,c,d; { return 2; }
和现代ANSI C(C89及以后标准)的如下写法完全等价:
int g(int a, int b, int c, int d) { return 2; }
K&R风格函数定义的核心特点:
- 函数名后的括号内仅填写参数名称,不标注参数类型
- 所有参数的类型声明统一放在参数列表闭括号和函数体大括号之间
- 未显式声明类型的参数会被默认推导为
int类型
示例代码行为解释
你给出的示例中int g();的声明属于无参数原型声明,C标准规定该声明表示g函数的参数数量、类型均未知,编译器在处理g(2)调用时不会做参数数量、类型的校验,也无法做正确的隐式类型转换,因此当调用时传入的参数和实际定义的参数不匹配时,就会触发未定义行为。
内容的提问来源于stack exchange,提问作者Kaiyakha
相关产品推荐
相关产品推荐

