C语言未显式声明参数的main函数输出i=1的原因解释
C语言特殊main函数输出
i=1的底层逻辑分析 首先明确:你给出的代码仅能在支持C89/ANSI C标准的编译器下通过编译,C99及更高版本的C标准已经废弃了相关语法,编译时会直接报错或抛出严重警告。
具体输出为1的原因如下:
- 隐式int规则生效:C89标准规定,函数参数如果没有显式声明类型,默认会被当作
int类型处理。你写的int main(i)会被编译器等价识别为int main(int i)。 - 匹配main函数的默认传参规则:操作系统调用程序入口main函数时,默认会传递两个标准参数,对应标准声明
int main(int argc, char *argv[]):- 第一个参数
argc是命令行参数的总个数 - 第二个参数
argv是命令行参数的字符串数组
你自定义的main只接收了第一个参数,i就对应了标准参数里的argc。
- 第一个参数
- 默认argc取值规则:无额外命令行参数直接运行程序时,
argc的默认值为1,因为命令行参数默认会把程序本身的执行路径算作第一个参数,总计数为1,所以最终打印i=1。
额外提示:该写法属于已废弃的老旧语法,可移植性极差,实际开发中必须严格使用标准的main函数声明格式,禁止依赖隐式类型规则编写代码。
内容的提问来源于stack exchange,提问作者Muskan Kalra
相关产品推荐
相关产品推荐

