关于旧式C语言main()函数特殊定义形式的技术咨询
老式C语言main函数的定义语法解析
你遇到的这种main函数定义是**K&R C(C89标准之前的老式C语法)**的函数声明风格,是C语言早期的写法,现在已经被现代C标准的原型式声明取代,但多数编译器仍保留兼容支持。
先看你给出的简化示例:
main (m1,s) char *s; { }
语法拆解
- 参数列表部分:
main(m1,s)先列出所有参数的名称,不写类型; - 参数类型声明:紧接着函数头的
char *s;是单独对参数s的类型声明; - 隐式类型规则:没有显式声明类型的参数
m1,在K&R C中默认被视为int类型。
这个老式写法完全等价于现代C的:
int main(int m1, char *s) { }
(注:K&R C中函数返回类型默认也是int,所以main前面没写返回类型时,编译器会自动视为返回int)
结合完整代码的验证
你提供的完整代码里的main定义:
main (m1,s) char *s; { int a,b,c,d,o[k],n = (int)s; // ... 函数逻辑 }
这里的m1被隐式解析为int类型,s是char*类型,和现代写法int main(int m1, char *s)完全一致。
补充说明
- 这种老式语法的核心是「先列参数名,再逐个声明类型」,多个参数的类型声明可以依次写在函数头之后,比如:
// K&R风格 func(a,b,c) int a; char b; float c; { // ... } // 等价于现代写法 int func(int a, char b, float c) { // ... } - 这种写法在C89标准发布后就被原型式声明取代,现代C标准(C99、C11及以后)更推荐显式的原型式声明,因为可读性更强,能避免隐式类型带来的错误。
内容的提问来源于stack exchange,提问作者amir mardani
相关产品推荐
相关产品推荐

