千家信息网

C语言中main函数与命令行参数实例分析

发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,这篇文章主要介绍了C语言中main函数与命令行参数实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中main函数与命令行参数实例分析文章都会有所收获,下面我们
千家信息网最后更新 2025年11月16日C语言中main函数与命令行参数实例分析

这篇文章主要介绍了C语言中main函数与命令行参数实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中main函数与命令行参数实例分析文章都会有所收获,下面我们一起来看看吧。

一、main 函数的概念

  • C语言中 main 函数称之为主函数

  • 一个C程序是从 main 函数开始执行的

二、main 函数的本质

  • main 函数是操作系统调用的函数

  • 操作系统总是将 main 函数作为应用程序的开始

  • 操作系统将 main 函数的返回值作为程序的退出状态

下面看一下 main 函数的返回值:

A.c:

#include  int main(){        printf("I'm A!\n");        return 0;}

B.c:

#include  int main(){        printf("I'm B!\n");        return 99;}

在 windows 下通过 VS012 命令行编译代码,如果对命令行编译不熟悉,请看《命令行》,否则跳过该部分

以B.c 为例,编译后通过 echo %ERRORLEVEL% 命令后,看到返回值为 99

下面再来进行一个实验,先将 A 进行编译,然后输入 B.exe && A.exe,发现只打印出 I'm B!,因为 B.exe运行结束后操作系统返回了 99,99 在操作系统看来 B.exe 没有正常运行退出,所以操作系统就不会运行 A.exe。

如果输入 A.exe && B.exe,结果如下,这是因为 A.exe 运行结束后正常返回 0 给操作系统,所以就会往下执行 B.exe

命令行

以下面的代码为例

test.h:

#ifndef _TEST_H_ #define _TEST_H_ #include  class Test{ public:     Test(const char* s)    {        printf("%s\n", s);    }}; #endif

test.cpp:

#include "test.h" Test t4("t4"); int main() {    Test t5("t5");}

t1.cpp:

#include "test.h" Test t1("t1");

t2.cpp:

#include "test.h" Test t2("t2");

t3.cpp:

#include "test.h" Test t3("t3");

第一步,打开 VS2012,选择 工具 -> Visual Studio 命令提示

第二步,实用 cd/d 进入需要编译的文件夹。(注意换盘符需要输入/d)

我想要编译的文件在C:\Users\HuZeQiu\Desktop\demo 文件夹里。

输入cd/d C:\Users\HuZeQiu\Desktop\demo,按下回车键,如下,就转到了目的文件夹

第三步,输入 cltest.cpp t2.cpp t1.cpp t3.cpp -otest.exe 编译程序。(cl 命令是用来编译程序)按下回车键后开始编译,生成 test.exe 可执行文件,如下:

第四步,运行 test.exe,直接输入 test.exe 即可,就可以看到运行结果

编译后的文件夹如下:

三、main 函数的参数

程序执行时可以向 main 函数传递参数

gcc 编译器的常见用法:

下面看一个 main 函数的参数示例:

#include  int main(int argc, char* argv[], char* env[]){    int i = 0;        printf("============== Begin argv ==============\n");        for(i=0; i

输出结果如下:

delphi@delphi-vm:~$ gcc test.c

delphi@delphi-vm:~$ ./a.out a.c b.c c.c ============== Begin argv ============== ./a.out a.c b.c c.c ============== End argv ==============

============== Begin env ==============

ORBIT_SOCKETDIR=/tmp/orbit-delphi SSH_AGENT_PID=1781 TERM=xterm SHELL=/bin/bash XDG_SESSION_COOKIE=6c560f89cd4609726ff940b800000007-1648713669.66817-1997070498 WINDOWID=71303204 QTDIR=/usr/local/Trolltech GNOME_KEYRING_CONTROL=/tmp/keyring-ZV2hRj GTK_MODULES=canberra-gtk-module USER=delphi LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.7.4/lib:/usr/local/Trolltech/qtcreator-2.4.1/lib: LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36: SSH_AUTH_SOCK=/tmp/keyring-ZV2hRj/ssh DEFAULTS_PATH=/usr/share/gconf/gnome.default.path SESSION_MANAGER=local/delphi-vm:@/tmp/.ICE-unix/1750,unix/delphi-vm:/tmp/.ICE-unix/1750 USERNAME=delphi XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome:/etc/xdg DESKTOP_SESSION=gnome PATH=/usr/local/Trolltech/Qt-4.7.4/bin:/usr/local/Trolltech/qtcreator-2.4.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games QT_IM_MODULE=xim PWD=/home/delphi XMODIFIERS=@im=ibus GDM_KEYBOARD_LAYOUT=cn LANG=zh_CN.utf8 GNOME_KEYRING_PID=1731 MANDATORY_PATH=/usr/share/gconf/gnome.mandatory.path GDM_LANG=zh_CN.utf8 GDMSESSION=gnome SHLVL=1 HOME=/home/delphi LANGUAGE=zh_CN:zh GNOME_DESKTOP_SESSION_ID=this-is-deprecated LOGNAME=delphi XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/ DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-k3N1W1OvOx,guid=5f504019e47302c3a7df0e2000000017 LESSOPEN=| /usr/bin/lesspipe %s WINDOWPATH=7 DISPLAY=:0.0 GTK_IM_MODULE=ibus LESSCLOSE=/usr/bin/lesspipe %s %s XAUTHORITY=/var/run/gdm/auth-for-delphi-omqXhW/database COLORTERM=gnome-terminal _=./a.out ============== End env ==============

四、main 函数一定是程序执行的第一个函数吗

下面看一个示例:

#include  #ifndef __GNUC__#define __attribute__(x) #endif __attribute__((constructor))void before_main(){    printf("%s\n",__FUNCTION__);} __attribute__((destructor)) void after_main(){    printf("%s\n",__FUNCTION__);} int main(){    printf("%s\n",__FUNCTION__);        return 0;}

输出结果如下:

constructor 告诉编译器在 main 函数之前先调用,destructor 告诉编译器在 main 函数之后调用。

如果在 windows 下的 VS2012 命令行窗口运行

#include  #ifndef __GNUC__#define __attribute__(x) #endif __attribute__((constructor))void before_main(){    printf("%s\n", "before_main");} __attribute__((destructor)) void after_main(){    printf("%s\n", "after_main");} int main(){    printf("%s\n", "main");        return 0;}

输出结果如下:

所以再来看这个问题:main 函数一定是程序执行的第一个函数吗?

回答如下:不一定。假设使用 gcc 编译器中的属性关键字,就可以指定 main 函数之前可以执行一个函数,在 main 函数之后执行一个函数;对于没有扩展属性关键字的编译器而言,main 函数一定是第一个函数。

关于"C语言中main函数与命令行参数实例分析"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"C语言中main函数与命令行参数实例分析"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

函数 编译 命令 程序 参数 操作系统 系统 运行 文件 输入 语言 结果 编译器 实例 实例分析 分析 文件夹 知识 输出 编译程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 查看数据库是否有匿名账户 数据库全量备份至少几份 潜江网络安全培训 数据库备份和回退哪个快 郑州app软件开发收费报价表 中国中文数据库 211985毕业软件开发工资 网络安全专业考研专硕 内网文件共享服务器管理软件 双11云服务器多优惠 青少年网络安全宣传原创漫画 如何增加云服务器空间 dns连接错误找不到服务器 微信支付服务器地址在哪里 mc如何搭建一个花雨庭服务器 初中生网络安全教育资料 价值分析工程广电网络技术运用 软件开发的技术评审细则 广东软件开发解决方案应用 保障网络安全 维护 济南crm软件开发中心 天娱传媒网络安全 c软件开发工程师面试问题 计算机网络技术学员 服务器主机名和IP做映射 燃烧的远征一区一组服务器 服务器程序保存多长时间 中宁县app软件开发怎么收费 原神国际服 服务器 vpp网络技术前景
0