打印
[经验分享]

C语言主函数的形式

[复制链接]
45|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mikewalpole|  楼主 | 2025-3-11 21:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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工程查看。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

1530

帖子

0

粉丝