main函数的概念

  • C语言中main函数称之为主函数
  • 一个c程序从main函数开始执行的

下面的main函数定义正确吗?

main函数的本质

  • main函数是操作系统调用的函数
  • 操作系统总是将main函数作为应用程序的开始
  • 操作系统将main函数的返回值作为程序的退出状态

例子1:main函数的返回值

test.c

#include<stdio.h>
int main()
{
printf("hello world");
return 99;
}

gcc test.c -o test

./test

echo $? --> 99

test2.c

#include<stdio.h>
int main()
{
printf("hello world2");
return 0;
}

gcc test2.c -o test2

./test && ./test2 --> hello world

操作系统认为test不是正常退出,发生短路

main函数的参数

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

例子2: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;
}

小技巧

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

例子2:gcc中的属性关键字

#include <stdio.h>  

#ifndef __GNUC__
#define __attribute__(x)
#endif __attribute__((constructor))
void before_main()
{
printf("%s\n",__FUNCTION__); //gcc拓展宏代表函数名
} __attribute__((destructor))
void after_main()
{
printf("%s\n",__FUNCTION__);
} int main()
{
printf("%s\n",__FUNCTION__); return 0;
}

小结

  • 一个c程序从main函数开始执行
  • main函数是操作系统调用的函数
  • main函数有参数和返回值
  • 现代编译器支持在main函数前调用其他函数

main函数与命令行参数的更多相关文章

  1. 解析main函数的命令行参数

    原创文章,转载请正确注明本文原始URL及作者. 介绍 写C/C++程序,我们常常需要把main函数的参数作为选项来传递.在linux中,解析选项有专门的函数可以用. int getopt(int ar ...

  2. C++main函数与命令行参数,退出程序

    本文翻译自:https://docs.microsoft.com/en-us/cpp/cpp/main-function-command-line-args?view=vs-2019 (除动态链接库d ...

  3. Unix系统编程()main函数的命令行参数

    命令行参数输入双引号是什么效果? 好像可以去空格化.

  4. 第33课 main函数与命令行参数

    main函数的概念: 测试程序: 以上四种定义main函数的方法都是正确的. main函数的本质: 操作系统是希望main函数的有返回值的,这样可以知道main函数的退出状态. 如果程序时异常退出的, ...

  5. C++-main函数与命令行参数

    1.main函数的概念 C语言中main函数称之为主函数 —个C程序是从main函数开始执行的 下面的main函数定义正确吗? //1 main(){ } //2 void main(){ } //3 ...

  6. getopt_long函数解析命令行参数

    转载:http://blog.csdn.net/hcx25909/article/details/7388750 每一天你都在使用大量的命令行程序,是不是感觉那些命令行参数用起来比较方便,他们都是使用 ...

  7. Java的main函数(命令行传参)

    javac :编译命令 java  :执行命令

  8. [笔记] 命令行参数 int main(int argc,char *argv[])

    int main(int argc,char *argv[]) // argument count 变量个数 argument values 变量值 C程序的main函数有两个形参* argc:整数, ...

  9. Go 命令行参数,JSON 序列化与反序列化

    #### Go 命令行参数,JSON 序列,反序列化这一节来学习一下Go 如果解析命令行参数,以及JSON 的序列化及反序列化; 命令行参数对于熟悉Linux 的同学来说比较清楚,如: ls -a , ...

随机推荐

  1. docker学习 (三) Windows 10 安装Docker

    Docker CE: 社区版,免费. Docker EE: 企业版,收费. 安装:             Windows 10 Pro 64, 必须开启Hyper-v 下载:Docker for W ...

  2. Summit Online Judge

    题意: 询问将取值在 $[L,R]$ 的若干个整数相加,可以得到 $[x,y]$ 区间内多少个数字. 解法: 只需要考虑求 $[L,R]$ 的数字能凑出 $[1,n]$ 的多少个数字,即可得出答案. ...

  3. CodeForces 524C The Art of Dealing with ATM (二分)

    题意:给定 n 种不同的钞票,然后用q个询问,问你用最多k张,最多两种不同的钞票能不能组成一个值. 析:首先如果要求的值小点,就可以用DP,但是太大了,所以我们考虑一共最多有n * k种钞票,如果每次 ...

  4. Installing cmake 2.8.8 or higher on Ubuntu 12.04 (Precise Pangolin) (转载)

    转自:http://cameo54321.blogspot.com/2014/02/installing-cmake-288-or-higher-on.html Check the version o ...

  5. 访问web-inf下jsp资源的几种方式

    转自:http://blog.csdn.NET/eidolon8/article/details/7050114 方法一: 本来WEB-INF中的jsp就是无法通过地址栏访问的,所以安全. 如果说你要 ...

  6. 51nod 1456【强连通,缩点,并查集】

    话说这道题的机遇是看到了http://blog.csdn.net/u010885899/article/details/50611895很有意思:然后就去补了这题 题意: 建最少的边使得给出的点相连. ...

  7. [Xcode 实际操作]九、实用进阶-(7)使用Xcode的版本管理功能(SCM)

    目录:[Swift]Xcode实际操作 本文将演示系统的版本控制功能. 软件配置管理(SCM):Software configuration management 是指通过执行版本控制.变更控制的规程 ...

  8. 解决element 照片墙上传时回显问题

    1.先看看样式: <el-upload class="imgList" action="1165165" list-type="picture- ...

  9. mybatis二级缓存

    二级缓存区域是根据mapper的namespace划分的,相同namespace的mapper查询数据放在同一个区域,如果使用mapper代理方法每个mapper的namespace都不同,此时可以理 ...

  10. cdq(2018.10.18)

    一句话题意:给你三个数列{a_i},{b_i},{c_i},保证每个数列都恰好是一个排列.你需要求出满足\(a_i<a_j,b_i<b_j,c_i<c_j\)的有序对\((i,j)\ ...