C语言主函数的形式

详解main函数参数argc、argv及如何传参 1、main()函数参数 2、main函数如何传参 2.1 环境准备 2.2 通过 Powershell 窗口传参 2.3 通过vs界面传参 3、int main() 和 int main(int argc, char *argv[]) 特点 阅读详情
AI摘要

本文详细介绍了C语言中main()函数的不同形式,包括无参数、带命令行参数、环境变量处理等,并强调了标准形式与非标准形式的适用场景和可移植性问题。,

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编程,宜采用第六种形式。

【浅谈】main函数的三个参数 【浅谈】main函数的参数      我们平时使用main函数时,在main函数参数这一栏常常省略不写,或者填上(void)。那么今天我们来看看main函数的参数。 main函数的参数有哪些?   在我们写好一个main函数框架后按F10开始单步调试,一直调试到走出main函数大括号外。这时我们能够看到如下代码:      我们可以很清晰的看到main函数时有参数的,而且是三个参数... 阅读详情

相关推荐

C/C++语言中的主函数:作用、常见形式和返回值

0。

weixin_47712251的博客 5224

系统变量

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本...

kyle1314608的博客 3913

C语言程序设计——函数(一)

一个较大的程序可分为若干个程序模块,每一个模块用来实现一个特定的功能。在高级语言中用子程序实现模块的功能。子程序由函数来完成。一个C程序可由一个主函数和若干个其他函数构成。

2301_79638883的博客 1227

Windows 自带环境变量

所谓 Windows 环境变量,指的是 Windows 指定操作系统工作环境的一些设置选项或属性参数,比方说指定系统文件夹或临时文件夹的位置等。与常量相比,一个环境变量往往由变量名称和变量值组成,变量值可以重新赋值,而常量值一直是固定不变的。

知识的海洋 2708

制造业批次管理中双计量单位动态转换的实践指南

本文详细介绍了制造业批次管理中双计量单位动态转换的实践指南,特别是在SAP系统中的配置与操作步骤。通过实际案例展示了如何解决采购与生产部门计量单位不一致的问题,提升物料管理效率。重点讲解了批次特性配置、移动类型调整及常见问题排查方法,适用于金属加工、化工等多个行业。

weixin_29228203的博客 158

从原理到调试:一次搞懂Camera Sensor的曝光、增益与帧率三角关系

本文深入解析Camera Sensor中曝光、增益与帧率之间的动态平衡关系,揭示低光环境下帧率下降的根本原因。通过实际调试案例和底层公式分析,帮助开发者理解如何优化相机参数设置,实现画质与流畅度的最佳平衡。

weixin_31310913的博客 429

27 C 语言编程核心:main 主函数(基本形式、返回值、参数、命令行传参)、多文件编程实践

本文深入解析了 C 语言编程中的核心要点,包括 main 主函数的作用与基本形式、命令行参数 argc 与 argv 的处理方式、多文件编程的项目结构搭建与编译方法。通过实例演示了如何利用命令行参数实现程序动态输入,以及多文件编程如何提升项目可维护性与扩展性。

大模型全栈工程师 · Thanks_ks 3023

STM32内存大小与地址的对应关系以及计算方法

1、概述 在计算机中要访问存储区,都是通过地址来进行访问的,包括所有的外设(比如串口、内存、硬盘等),都对应有一个访问地址,地址就相当于门牌号,有了门牌号,我们才知道操作的是哪一个区域、哪一个外设。 最被大家熟知的是计算机内存,计算机内存有4G、8G,16G等等,对于程序员而言,要在代码中操作这些内存,肯定得知道内存的地址,此外,还需要会计算地址与内存大小的计算方法与对应关系。STM32作为微

Ace's Blog 4万+

c语言字符串分割整数,c语言:编写函数,对于任意输入的一个整数,转换为千分位分隔的字符形式输出,并主函数中调用...

/#include "stdafx.h"//vc++6.0#include "stdio.h"#include "string.h"#include "stdlib.h"char *mychange(char *p,int n){char a[11],i,j,k;i=strlen(itoa(n,a,10))-1;for(k=j=0;i>=0;i--){p[j++]=a[i];if(++k%3...

weixin_39918128的博客 1328

密码学:一文看懂Base64算法

Base64常常在我们开发中出现,我们可能只知道它是一串乱码(看不懂的符号),知道有时候知道我们需要把一些数据进行base64编码,有时候需要进行Base64解码。但是却不知道它的作用是什么?它存在的意义是什么?还有它是如何生成的?如何编码和解码?上述的疑问相信在你读完本篇文章之后烟消云散。下面开始正文。Base64是什么?它和加密解密操作有什么关系吗?没错,这就是经过Base64编码后的字符串。对它解码后,我们获得以下内容点个关注,是对我持续创作的最大的鼓励!

Shujie 1万+

LTO编译器优化介绍以及开启方法

LTO优化的详细介绍

性感的小君君 4922

C语言 笔记1

//头文件 #include<stdio.h> #include<stdlib.h> //主函数 int main(void) { printf("hello world"); //卡主执行控制台,方便观察结果 system("pause"); return 0; } 一个项目只能有一个 main 方法入口,否则报错 常见的五种主函数形式: //第一种 , c99 1999 //c语言标准主函数形式,void表示不接受任何参数.

BasilGentleman的博客 166

simulink调用C代码函数-C Caller模块

simulink中如何调用写好的C代码函数?使用C Caller模块调用C代码。

weixin_40531919的博客 5670

c++对的调用没有匹配的函数_C语言之函数系列Ⅰ

一、概述一个C程序可以分为若干个函数;每个程序有且只能有一个主函数(main),其它函数都是“子函数”;子函数可以互相调用,但主函数不能被调用;一个C源程序由一个或多个文件构成,一个源程序文件是一个编译单位说明:①C程序的执行从main函数开始,调用其它函数后仍回到main函数,程序在main函数结束时结束;②所有子函数都是平行的,任何子函数都不属于其它函数;③从用户的角度看,函数可分为:标准函数...

weixin_39928017的博客 649

新手网工别慌!手把手带你搞定华为OLT开局配置(从登录到业务下发全流程)

本文为新手网络工程师提供华为OLT设备开局配置的详细指南,涵盖从设备登录、基础配置到业务部署的全流程。通过实战案例和常见问题排查,帮助读者快速掌握华为OLT配置技巧,确保业务顺利开通。

weixin_33721344的博客 481

Orbbec-Gemini-335 深度相机 Python SDK 编译与配置全记录(Windows 环境)

本篇博客将围绕 Windows 系统下 Orbbec SDK 的 Python 配置与编译过程进行详细说明,主要使用的是官方提供的 pyorbbecsdk Python wrapper 项目以及 Orbbec SDK V2 Python Wrapper 配置指南,并记录了安装与配置过程中遇到的若干问题及解决办法。

Junseer的博客 1965

智能汽车嵌入式软件开发基础篇-嵌入式C语言基础2

数组元素的个数表示数组最多可以存放的数据。当一个函数调用另一个函数时,程序就从主调函数转移到被调函数,并且从被调函数的函数体起始位置开始执行,直到函数体执行结束,返回到主调函数的调用位置继续往下执行。C程序总是从主函数开始执行,其它函数只有在被主函数或其它正在执行的函数调用时才能被程序执行,执行后返回调用函数,最后返回到主函数,在主函数中结束整个程序的运行。C程序是由一个主函数和其它若干函数构成,每个函数实现一定的功能,其中主函数main()是必需的,其它函数被主函数调用或者其它函数之间相互调用。

thrun的博客 692

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

2025年最新C语言教程3-C语言必不可少的主函数

C语言中main函数是程序执行的唯一入口点,必须声明为int返回类型。标准形式分两种:无参数int main(void)和带参数int main(int argc, char *argv[])。关键要求包括:必须返回0(成功)或非零值(错误),每个程序只能有一个main函数,不可嵌套定义。常见错误包括返回类型缺失、使用void返回类型或忘记返回值。C23标准强化了main函数规范,要求显式返回int类型。最佳实践是始终采用标准写法以确保跨平台兼容性。

文石_2009的博客 586

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

PTA递归函数 输出一个十进制整数的十六进制形式

递归函数输出一个十进制整数的十六进制形式编写函数,函数的参数是整数N,在函数中输出整数N的十六进制形式(递归方法实现)。主函数中输入整数a和b,输出从a到b的所有整数的十六进制形式。具体输出格式参考样例。 输入样例: 200 210 输出样例: C8 C9 CA CB CC CD CE CF D0 D1 D2 输入样例: 20000 20010 输出样例: 4E20 4E21 4E22 4E23 4E24 4E25 4E26 4E27 4E28 4E29 4E2A

C19334的博客 240

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C语言入门---------划水你我他

我们先来看一个C语言的代码例子: 这是一个较为基础的C语言代码,不需要看懂,只是简单了解就可以。 #include <stdio.h> int main(){ int a,b; scanf("%d%d",&a,&b); printf("%d",a+b); return 0; } 这个文件在保存时,我们以.cpp的形式保存,即C++的形式保存,而非.C的形式保存,即非C...

豆子的博客 243

PTA递归函数 输出一个十进制整数的二进制形式

递归函数输出一个十进制整数的二进制形式编写函数,函数的参数是整数N,在函数中输出整数N的二进制形式。主函数中输入整数a和b,输出从a到b的所有整数的二进制形式。 输入样例: 10 15 输出样例: 1010 1011 1100 1101 1110 1111

C19334的博客 237

C语言程序设计-不带参数的主函数、赋值运算符、数据类型

1.6 提高部分 1.6.1不带参数的主函数 1.6.2 赋值运算符的进一步讨论 1.6.3 数据类型的进一步讨论

Chen298的博客 1365

【C语言入门教程】1.1 基本程序结构

基本程序结构就是从上至下顺序执行的程序,C语言程序必须有且只有一个主函数,程序从主函数开始执行,直到主函数结束。下例是根据半径求圆形面积的程序源代码。 #include &lt;stdio.h&gt; #define PI 3.14 int main() {     float r, s;     printf("半径 = ");     scanf("%f", &amp;r...

weixin_34221773的博客 80

C语言 - 指针

C语言指针相关知识

zkx990121的博客 373

C语言学习笔记-主函数

//C语言主函数 模板int main(void) {   return 0; } //带命令行的主函数 模板 int main(int argc,char* argv[]) {   return 0; } //C++标准主函数 模板 int main() {   return 0; } 转载于:https://www....

weixin_30553837的博客 127
下一篇: C语言主函数的返回值
金达南
博客等级 码龄3年 137粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值