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. MongoDB搭建ReplSet复制集群

    MongoDB的复制集是一个主从复制模式 又具有故障转移的集群,任何成员都有可能是master,当master挂掉用会很快的重新选举一个节点来充当master. 复制集中的组成主要成员 Primary ...

  2. MSD3393/MSD3463 屏参及REG对照表

    概述:TIMMING组成 MOD: BANK:0x1032 VOP: SC_BK10 注意BANK对应: VOP: SC_BK10 例如:MS_U16 m_wPanelHTotal;   Sub VO ...

  3. SSL卸载技术对于HTTPS应用的优化与思考

    迅猛发展的互联网为我们提供了丰富的信息资源,在带来便利的同时也影响着人们工作和生活方式.而让我们无法忽视的是,在开放的互联网所带来的繁荣背后,同时也潜藏着安全方面的隐患.随着人们对网络的依赖愈渐加深, ...

  4. 转:CURL库在程序中的运用浅析

    CURL库在程序中的运用浅析-nk_ysg-ChinaUnix博客 http://blog.chinaunix.net/uid-22476414-id-3286638.html 这个目录的文章转载fr ...

  5. Asset Catalog Help (五)---Migrating an iOS App Icon Set or Launch Image Set

    Migrating an iOS App Icon Set or Launch Image Set Simplify image management by moving existing app i ...

  6. Flutter实战视频-移动电商-39.路由_Fluro的路由配置和静态化

    39.路由_Fluro的路由配置和静态化 handler只是单个路由的配置,这节课我们要学习路由的整体配置 整体配置 新建routers.dart文件来做整体配置 detailsHandler就是我们 ...

  7. SqlServer2012——Select,分组,排序、插入

    1.select 简单语句 --select语句 * --select子句 * AS result --select子句,可以将结果保存在result中 ~~~~~~~~~~~~~~~~~~~~~~~ ...

  8. HDU1080 【LCS变形】

    题意: 给你每种字符匹配的权值大小,给你两个串,长度小的串可以在小串里面添加空格和大串匹配,问你一个最大匹配权值. 思路: 有点类似于LCS吧,我们在求两个串的LCS的时候,不行的就扔掉了,在这里就是 ...

  9. builtin_shaders-5.3.4f1学习-Unlit/Texture

    // Unlit shader. Simplest possible textured shader. // - no lighting // - no lightmap support // - n ...

  10. Cocos2d-x-html5之HelloWorld深入分析与调试

    Cocos2d-x-html5之HelloWorld深入分析与调试 另:本章所用Cocos2d-x版本为: Cocos2d-html5-v2.1.1 http://cn.cocos2d-x.org/d ...