C语言主函数的形式

C语言中,main()函数是必须的,称为主函数,它是程序运行的入口,main()函数的形式有多种。

一、第一种形式
int main(void)
{

    return 0;
}

int 为返回值,由于没有任何信息传递给main()函数,其参数列表为一个void,表示不接受任何参数。

二、第二种形式

 形式较为复杂,如下:

int main(int argc, char * argv[])
{
    
    return 0;
}

它提供一个int类型的返回值。第一个参数是命令行中的字符串数,按照惯例,这个int型参数被命名为argc,但这不是必须的,第二个参是指向传入命令构成字符串的指针数组,执行程序时,每个字符串被存储到内存中,并分配一个指针指向它,然后这些指针构成一个数组,保存再argv中,同样,这个名称也是惯例,不是必须的。怎么使用呢?

实验一:命令行输入

有如下源程序:

// command_line_input.c 
#include <stdio.h>
int main( int argc, char * argv[]) 
{
    int index = 0;
    printf("Your input are: \n");
    while(index < argc) {
        printf("%d: %s\n", index, argv[index]);
        index++;
    }

    return 0;
}

对其进行编译,命令如下:

gcc command_line_input.c -o command_line_input.exe

后执行,键入:

command_line_input.exe first second third

回车后,显示如下:

0: command_line_input.exe
1: first
2: second
3: third

由于输入了四个字符串,分别为:

command_line_input.exe
first
second
third

分别将其显示出来,其中可执行文件名是第一个字符串。

三、第三种形式
int main(int argc, char * argv[], char *env[])
{

    return 0;
}

前两个参数的含义与第二种形式相同,第三个参数env用于读取系统中的环境变量,并将每个环境变量作为一个字符串对其分配内存,并分配一个指针指向它,然后将这些指针保存在指针数组env中。这个参数的名称来源于unix系统的env命令,该命令在unix或linux系统中用于打印系统环境变量,做实验。

实验二:打印系统环境变量
// print_env.c
#include <stdio.h>
int main(int argc, char * argv[], char *env[])
{
    int index = 0;
    while(env[index]) {
        printf("env[%d]: %s\n", index, env[index]);
        index++;
    }

    return 0;
}

对其进行编译,命令如下:

gcc main_third.c -o main_third.exe

执行后显示:

env[0]: ALLUSERSPROFILE=C:\ProgramData
env[1]: APPDATA=C:\Users\HUAWEI\AppData\Roaming
……
env[50]: windir=C:\WINDOWS
env[51]: ZES_ENABLE_SYSMAN=1

便打印了我的电脑系统中的环境变量。

四、第四种形式
int main()
{

    return 0;
}

这种形式中省略了main()中的void,在C语言中,main()函数省略void参数,让括号空着,表示对是否接受参数表示沉默,在C++中省略void与不省略表示含义相同,表示不接受任何参数。

五、第五种形式
main()
{

}

这种形式是著名的K&R中定义的最初形式。我的编译器为gcc(V9.2.0),我们给出一个程序如下,这个程序是K&R中给出的著名的输出hello,world的程序,为了对K&R表示尊重,我们不在程序头部添加函数名的注释行,程序名称命名为hello_world.c。

#include <stdio.h>
main()
{
    printf("hello,world\n");
}

编译如下:

gcc hello_world.c -o hello_world.exe

可以生成可执行文件,运行后输出hello,world,但是编译时给出一个warning,提醒main()函数的默认返回类型为int,如下:

hello_world.c:2:1: warning: return type defaults to 'int' [-Wimplicit-int]
    2 | main()

如果编译时打开c99开关,编译如下:

gcc --std=c99 hello_world.c -o hello_world.exe

或打开c11开关,,编译如下:

gcc --std=c11 hello_world.c -o hello_world.exe

将得到同样的结果。

六、第六种形式
void main()
{

}

这种形式,没有任何标准考虑过它,但是在我的程序中运行时,没有任何的警告和错误,在普通的电脑端C程序开发中并不建议采用这种形式,在某些特殊场合,如在使用Keil软件进行C51编程时,最常用的就是这种形式,而且Keil官方给出的C51例程中也是使用这种形式,你可以通过Keil软件工程(project)子菜单下的安装目录下的“Open Project”菜单项,打开Keil软件安装目录下“C51->Examples->BLINKY"目录下的BLINKY.Uv2工程查看。

七、总结

上面看到的第一种形式和第二种形式是C语言的国际标准中定义的形式,也是最应该采取的形式,在编译器允许的情况下,大可使用其他多种形式,但是程序的可移植性将会大打折扣,如果是C51编程,宜采用第六种形式。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值