广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中main函数与命令行参数实例分析
  • 413
分享到

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

2023-06-30 05:06:21 413人浏览 泡泡鱼
摘要

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

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

一、main 函数的概念

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

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

二、main 函数的本质

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

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

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

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

A.c:

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

B.c:

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

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

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

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

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

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

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

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

命令行

以下面的代码为例

test.h:

#ifndef _TEST_H_ #define _TEST_H_ #include <stdio.h> 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 命令提示

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

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

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

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

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

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

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

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

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

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

编译后的文件夹如下:

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

三、main 函数的参数

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

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

GCc 编译器的常见用法:

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

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

#include <stdio.h> int main(int argc, char* argv[], char* env[]){    int i = 0;        printf("============== Begin argv ==============\n");        for(i=0; i<argc; i++)    {        printf("%s\n", argv[i]);    }        printf("============== End argv ==============\n");        printf("\n");    printf("\n");    printf("\n");        printf("============== Begin env ==============\n");        for(i=0; env[i]!=NULL; i++)    {        printf("%s\n", env[i]);    }        printf("============== End env ==============\n");     return 0;}

输出结果如下:

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 <stdio.h> #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;}

输出结果如下:

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

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

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

#include <stdio.h> #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;}

输出结果如下:

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

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

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

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

--结束END--

本文标题: C语言中main函数与命令行参数实例分析

本文链接: https://www.lsjlt.com/news/327467.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言中main函数与命令行参数实例分析
    这篇文章主要介绍了C语言中main函数与命令行参数实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中main函数与命令行参数实例分析文章都会有所收获,下面我们一起来看看吧。一、main 函数的概念C...
    99+
    2023-06-30
  • C语言中main函数与命令行参数详细讲解
    目录一、main 函数的概念二、main 函数的本质命令行三、main 函数的参数四、main 函数一定是程序执行的第一个函数吗五、小结一、main 函数的概念 C语言中 main ...
    99+
    2022-11-13
  • C语言中main()函数参数问题的示例分析
    这篇文章主要介绍了C语言中main()函数参数问题的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。#include<stdio.h>void m...
    99+
    2023-06-29
  • C语言函数返回值与参数传递实例分析
    本篇内容介绍了“C语言函数返回值与参数传递实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一:参数传...
    99+
    2022-10-19
  • C语言中数组作为函数参数的示例分析
    这篇文章主要介绍了C语言中数组作为函数参数的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数组作为函数参数1 冒泡排序函数的错误设计...
    99+
    2022-10-19
  • C语言函数使用实例分析
    这篇文章主要介绍了C语言函数使用实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言函数使用实例分析文章都会有所收获,下面我们一起来看看吧。函数的声明和定义函数声明告诉编译器有一个函数叫什么,参数是什么...
    99+
    2023-06-30
  • C语言的div()函数实例分析
    本文小编为大家详细介绍“C语言的div()函数实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言的div()函数实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2022-10-19
  • Python argparse参数模块之命令行参数实例分析
    这篇文章主要介绍“Python argparse参数模块之命令行参数实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python argparse参数模块之命令行参数实例分析”文章能帮助大家解...
    99+
    2023-07-02
  • 学习Go语言文档中的flag.Parse函数解析命令行参数
    学习Go语言文档中的flag.Parse函数解析命令行参数,需要具体代码示例概览:在Go语言中,flag包提供了一种简单而灵活的方式来解析命令行参数。flag.Parse函数可以帮助我们解析命令行中传递的参数,并将其绑定到已定义的flag变...
    99+
    2023-11-04
    文档 关键词:Go语言 flagParse函数
  • C语言sizeof与字符串处理与动态内存分配及main函数参数详解
    目录常用的字符串处理函数(标准库里面的)sizeof 求字节运算符动态内存分配函数main的参数问题常用的字符串处理函数(标准库里面的) strlen : 用来求一个字符串的长度 &...
    99+
    2022-11-13
  • C语言中库函数的示例分析
    这篇文章主要为大家展示了“C语言中库函数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中库函数的示例分析”这篇文章吧。1 返回整数的getchar函数代码:#include<...
    99+
    2023-06-29
  • C语言中变参函数传参的实现示例
    目录背景引入问题分析指针大小参数位置排布解决问题额外的测试总结参考资料背景引入 近期在看一本书,叫做《嵌入式C语言自我修养》,写的内容对我帮助很大,是一本好书。在第6章,GNU C编...
    99+
    2022-11-12
  • C语言之函数知识点实例分析
    这篇文章主要介绍了C语言之函数知识点实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言之函数知识点实例分析文章都会有所收获,下面我们一起来看看吧。一、引入引例:定义6个整型变量a,b,c,d,e,f,...
    99+
    2023-07-02
  • 深入理解Go语言文档中的flag.StringVar函数解析命令行参数
    在Go语言中,我们有时需要通过命令行传递参数给程序。为了方便用户设置参数,Go语言提供了flag包来解析命令行参数。其中flag.StringVar函数是flag包中最常用的函数之一,它可以帮助开发者快速的定义并解析命令行参数。本文将深入分...
    99+
    2023-11-03
    Go语言 命令行参数 flagStringVar
  • C语言选择、循环、函数、数组与操作符实例分析
    本篇内容介绍了“C语言选择、循环、函数、数组与操作符实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、选择语句如果你好好学习,校招时...
    99+
    2023-06-30
  • C语言中函数递归的示例分析
    这篇文章主要介绍C语言中函数递归的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是递归?递归(recursion):程序调用自身的一种编程技巧。如何理解函数递归:从调用自身层面:函数递归就是函数自己调用自...
    99+
    2023-06-29
  • C语言指向函数的指针实例分析
    这篇文章主要介绍“C语言指向函数的指针实例分析”,在日常操作中,相信很多人在C语言指向函数的指针实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指向函数的指针实例分析”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-02
  • 学习Go语言文档中的flag.StringVar函数解析命令行参数并赋值
    学习Go语言文档中的flag.StringVar函数解析命令行参数并赋值Go语言是一门简洁高效的编程语言,广泛应用于开发 Web 后端、云平台等领域。而命令行参数解析是很多程序需要具备的功能之一。Go标准库中的flag包提供了一系列函数,用...
    99+
    2023-11-04
    Go语言 命令行参数 flag包
  • C语言函数加里化和偏函数应用实例分析
    今天小编给大家分享一下C语言函数加里化和偏函数应用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。【名词解释】Curr...
    99+
    2023-06-17
  • C语言树状数组与线段树实例分析
    这篇文章主要介绍“C语言树状数组与线段树实例分析”,在日常操作中,相信很多人在C语言树状数组与线段树实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言树状数组与线段树实例分析”的疑惑有所帮助!接下来...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作