C语言 main 函数详情

 更新时间:2021年10月20日 09:50:52   作者:黄裕玲  
这篇文章主要介绍C语言 main 函数,文章将围绕C语言 main 函数相关资料详细展开,需要的朋友可以参考一下

前言:

但凡是学过C语言的人,都知道要先写main函数,然而很多时候我们看到的main函数却各有差异,这究竟是为啥?哪种是对的呢?今天我们就来聊聊main函数。那么main函数一共有多少个版本呢?

1、main()

直接的mian()并没有返回值,没有入参。这种写法实际来说,部分编译器会显示警告,并且会返回默认值为int。不过在C89标准中其实是可以的,由于没有声明返回类型,所以才会返回默认值int

2、void main()

初学者经常会使用的形式,但是并不知道来源在哪,在C89/C99/C11等文档中都没有提到这种形式的痕迹。这种写法的返回值是void,没有参数。值得注意的是,一旦声明是void,在程序退出后,想要获取其退出状态也就不可以了。所以还是不建议返回值为void的。

3、int main(void)

比较常见的写法,这种写法的形参为void,表明它在调用的时候不能传入任何参数,那么它也就不能获取命令行参数了。

4、int main ()

和上面第3种看起来好像没啥区别,但是还是有些许不同。就下面例子来说:

#include<stdio.h>
void test();
int main()
{
test(4);
return 0;
}
void test(int a)
{
printf("%d",a);
}

程序仍然可以正常运行,test函数虽然声明为无入参,但调用时却是可以传入任何参数或不传参数的。

5、int main(int argc,char *argv[])

int argc入参为命令行参数个数,char *argv[]入参为命令行参数数组。这种写法也比较常见的,主要用在需要从命令行获取参数的功能。int main(int argc,char *argv[],char *envp[])包含三个参数的一种写法,上面第5种的升级版,int argc是命令行参数个数,char *argv[]是命令参数数组,char *envp[]是环境变量数组。虽然只比第六种多了一个参数,但全局变量environ可以代替envp的作用,获取或者设置环境变量可以使用getenvputenv,因此也没有必要使用该形式。这种写法多源于编译器的扩展。上面写了这么多种写法,那么到底写哪种才算是对的?查阅C89/C99/C11标准文档,

里面明确固定了两种写法:

  • int main(void) { /* ... */ }
  • int main(int argc, char *argv[]) { /* ... */ }

所以说,其他的写法并不符合标准,有些算是历史遗留有些算是编译器的扩展,还有些不知道从哪里生出来的。
所以说了这么多,为了代码的通用可移植性,建议采用标准提供的形式,还是推荐使用标准文档中规定的这两种写法。如果一个函数确定无需传入任何参数,那么用void限定是一个不错的选择。

到此这篇关于C语言 main 函数详情的文章就介绍到这了,更多相关C语言 main 函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 对比C语言中memccpy()函数和memcpy()函数的用法

    对比C语言中memccpy()函数和memcpy()函数的用法

    这篇文章主要介绍了对比C语言中memccpy()函数和memcpy()函数的用法,二者都是用于复制内存内容,注意区别,需要的朋友可以参考下
    2015-08-08
  • C/C++关于实现CAN信号的获取方法

    C/C++关于实现CAN信号的获取方法

    这篇文章主要介绍了C/C++关于实现CAN信号的获取方法,标准的CAN 数据为8字节,即64位,但是CAN FD的最大数据可为64字节,为512位,其中的帧ID分为标准帧和扩展帧,其中用11位标准帧,用29位表示扩展帧
    2023-02-02
  • C++模板类的用法

    C++模板类的用法

    这篇文章主要介绍了C++模板类的用法,实例讲述了模板类的概念及相关用法,需要的朋友可以参考下
    2014-10-10
  • 详解vs2022创建及调用.lib的方法

    详解vs2022创建及调用.lib的方法

    这篇文章主要介绍了vs2022创建及调用.lib的方法,调用Lib的原则就是可以让编译器找到头文件和库文件的目录,并正确引入,本文给大家详细讲解需要的朋友可以参考下
    2022-11-11
  • 关于C++数组中重复的数字

    关于C++数组中重复的数字

    这篇文章主要介绍得是关于C++数组中重复的数字,文章以问题描述得形式,对问题展开分析用不同得方法去解决问题并附上方法得详细代码,需要的朋友可以参考以下文章得具体内容
    2021-11-11
  • C语言中枚举与指针的实例详解

    C语言中枚举与指针的实例详解

    这篇文章主要介绍了 C语言中枚举与指针的实例详解的相关资料,希望通过本文大家能够掌握枚举与指针的知识,需要的朋友可以参考下
    2017-09-09
  • C++中的并行与并发基础与使用详解

    C++中的并行与并发基础与使用详解

    对于多线程来说,这两个概念有很大部分是重叠的。对于很多人来说,它们的意思没有什么区别。其区别主要在于关注点和意图方面(差距甚微)。这两个词都是用来对硬件在同时执行多个任务的方式进行描述的术语,不过并行更加注重性能
    2023-02-02
  • 举例解析设计模式中的工厂方法模式在C++编程中的运用

    举例解析设计模式中的工厂方法模式在C++编程中的运用

    这篇文章主要介绍了设计模式中的工厂方法模式在C++编程中的运用,文中也对简单工厂模式和工厂方法模式进行了简单的对比,需要的朋友可以参考下
    2016-03-03
  • 浅析C语言头文件和库的一些问题

    浅析C语言头文件和库的一些问题

    以下是对C语言中头文件和库的一些问题进行了详细的分析介绍,需要的朋友可以参考下
    2013-07-07
  • C++常见错误中英文对照表

    C++常见错误中英文对照表

    对于刚学编程,刚接触C++的新手来说,编译运行报错是最头疼的一件事,爆出一堆英文,英语差一点的又不知道什么意思,所以也不知道如何去改,在此,我给大家传一份常见错误中英文对照表及简单解释,希望可以帮到大家
    2016-05-05

最新评论