程序是从main主函数开始运行吗?

2023-05-16

   很多人开始学计算机语言,编写代码时都会有一个疑问:程序真的是从main主函数开始的吗?之前什么都不做吗?main结束后就不能执行其他函数了吗?下面本篇文章就为此问题做一个简单的解释。
   操作系统在装载程序之后,首先运行的不是main程序的第一行,在执行mian主函数之前其实还有一些别的代码需要执行,这些代码负责准备main主函数执行所需要的一些环境,并且负责调用main主函数,在main函数返回后,会记录main函数的返回值,调用atexit()函数,然后结束进程。运行这些代码的函数称为入口函数或入口点,一个程序的入口点实际上是一个程序的初始化和结束部分,一个典型的程序运行步骤大致如下:
   1、操作系统在创建进程后,把控制权交给了程序的入口,这个入口就是运行库中的某个入口函数。
   2、入口函数对运行库和程序运行环境作初始化,包括堆,线程全局变量的构造。
   3、入口函数在完成初始化之后,调用main()开始执行
   4、main函数执行完成后返回到入口函数,然后入口函数进行清理工作,然后进行系统调用结束进程。
  
 1、下面举例一个代码:
    #include<stdio.h>
 
    int a=3;
    int main(int argc,char* argv[])
    {
       printf("hello world");
       return 0;
     }
例如上面那个程序,在main函数第一行执行之前全局变量的初始化已经完成了,main函数参数也传了进来
2、atexit函数也是在main函数返回后调用
atexit()注册的函数类型应为不接受任何参数的void函数,exit调用这些注册函数的顺序与它们 登记时候的顺序相反。同一个函数如若登记多次,则也会被调用多次。如果一个进程被信号所中断,那由atexit()函数注册的终止处理程序不会被调用.
 
  程序例:
 
  #include <stdio.h>
       #include < stdlib.h>
 
  void exit_fn1(void)
    {
  printf("Exit function #1 called\n");
    }
  void exit_fn2(void)
 {
  printf("Exit function #2 called\n");
  }
 
  int main(void)
    {
  /* post exit function #1 */
  atexit(exit_fn1);
  /* post exit function #2 */
  atexit(exit_fn2);
 
  return 0;
 }
     输出:
  Exit function #2 called
  Exit function #1 called
main主函数的参数:

Int main(int argc  , char *argv[],char* envp[])

 

        传参个数 参数列表  环境变量

主函数默认接收一个参数:就是所执行的命令,所传参数以空格键区分,若要传字符串可以用双引号和转义字符连接


文章材料来源于《程序员的自我修养》
此博客部分内容  http://www.cnblogs.com/wanghetao/archive/2012/04/03/2431256.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序是从main主函数开始运行吗? 的相关文章

  • PX4飞控-自定义发送MavLink消息

    PX4飞控 自定义发送MavLink消息 一 自定义XML文件 如图所示 这相当于定义了一个结构体 xff0c 结构体里面就有一个类型为uint8 t的u8元素 使用的id端口为150 xff0c 这里注意不要与已经存在的id重复 二 使用
  • IPv4和IPv6何去何从

    一 缘起 某一天 xff0c 在公司技术群内运维大佬们发了这么一条消息 这条消息瞬间勾起了我的好奇心 什么是IPv6 xff1f 为什么要切IPv6 xff1f 于是在上班时多去了几次去卫生间之后 xff0c 对IPv6有了一些初步认识 x
  • 利用kalibr工具进行camera-IMU标定

    camera IMU标定 一 camera IMU标定 简述 1标定目的 xff1a 我们进行camera IMU的目的是为了得到IMU和相机坐标系的相对位姿矩阵T 2标定工具 xff1a 我们利用Kalibr标定工程对camera IMU
  • React State 状态

    React State 状态 React 把组件看成是一个状态机 xff08 State Machines xff09 通过与用户的交互 xff0c 实现不同状态 xff0c 然后渲染 UI xff0c 让用户界面和数据保持一致 React
  • C#实现窗体内容随着窗体的缩放而缩放

    private float X private float Y 获取控件的width height left top 字体大小的值 存放在控件的Tag属性中 private void setTag Control cons 遍历窗体中的控件
  • ROS基础 - dynamic_reconfigure 动态参数

    ROS基础 dynamic reconfigure 动态参数使用 实例详解 采用 ROS dynamic reconfigure 的形式 xff0c 可以在程序运行过程中实时更改参数大小 xff0c C 43 43 代码通过回调函数接收数据
  • C_C++变量命名规则

    C C 43 43 变量命名规则 变量命名规则是为了增强代码的可读性和容易维护性 以下为C 43 43 必须遵守的变量命名规则 xff1a 1 变量名只能是字母 xff08 A Z xff0c a z xff09 和数字 xff08 0 9
  • Git 初次提交代码

    Git 初次提交发布代码 首先打开 bash 出现git的命令行 可以在GitHub上新建一个仓库 这是提交了的代码的仓库 xff0c 刚创建的时候只有 README md 和 gitignore 两个文件 xff01 在进入git的命令行
  • MATLAB 快速绘制曲线图的形状,粗细,颜色

    目录 MATLAB 快速绘制曲线图的形状 xff0c 粗细 xff0c 颜色1 通过改变R G B 的值改变线条的颜色 xff1a 2 通过改变c 1 43 的值改变线条的粗细 xff1a 3 线条形状 xff0c 粗细 xff0c 颜色选
  • STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结

    摘自 xff1a STM32F103五分钟入门系列 xff08 一 xff09 跑马灯 xff08 库函数 43 寄存器 xff09 43 加编程模板 43 GPIO总结 作者 xff1a 自信且爱笑 发布时间 xff1a 2021 04
  • Git的安装(附安装包)

    目录 使用目的关于Git的历史Git的安装1 运行安装包 xff0c 点击next2 选择安装路径 xff0c 下一步3 点击next4 设置开始菜单 xff0c 默认next5 点击next6 选择git的方式7 剩下所有步骤均默认即可8
  • GPIO输入输出模式原理(八种工作方式附电路图详解)

    这几篇博文讲的不错 xff0c 可参照着理解 xff1a STM32下拉输入模式与振动传感器的使用 上拉电阻与下拉电阻 通俗解读 上 下拉电阻 xff08 定义 强弱上拉 常见作用 吸电流 拉电流 灌电流 xff09 个人总结 xff1a
  • 树莓派接入公网(花生壳)

    参考 xff1a 树莓派接入公网 作者 xff1a 图触靓 发布时间 xff1a 2020 12 22 17 28 19 网址 xff1a https blog csdn net bhbhhyg article details 107994
  • 深入理解STM32内存管理

    参考 xff1a 详解ROM和RAM 作者 xff1a 嵌入式实验楼 网址 xff1a https mp weixin qq com s y2aG7kX 6CTyeMzEJW YHw 内存相关博文 xff1a 1 内存四区 xff08 代码
  • React Props

    state 和 props 主要的区别在于 props 是不可变的 xff0c 而 state 可以根据与用户交互来改变 所以 xff0c 有些容器组件需要定义 state 来更新和修改数据 而子组件只能通过 props 来传递数据 pro
  • Chrome如何下载网页视频

    目录 第一步 xff1a 右键 xff0c 选择 检查 指令 xff0c 进入代码控制面板第二步 xff1a 单击代码面板左上角红色标出来的按钮 xff0c 然后鼠标移到左边视频上第三步 xff1a 双击src后面的代码 xff08 全部展
  • MODBUS通讯协议详解(基于485)

    参考 xff1a 灵育科技Modbus课程总结 作者 xff1a Naunyang 时间 xff1a 2020 11 23 13 51 58 网址 xff1a https blog csdn net Naunyang article det
  • 步进电机、伺服电机、舵机、无刷电机、有刷电机区别

    参考 xff1a 步进电机 伺服电机 舵机的原理和区别 xff1f Vincross的回答 知乎 地址 xff1a https www zhihu com question 37374664 answer 167299936 目录 什么是电
  • 面经——嵌入式常见面试题总结100题(下)

    参考 xff1a 嵌入式常见面试题总结 xff08 1 xff09 作者 xff1a 天泉证道 发布时间 xff1a 2018 11 08 09 33 43 网址 xff1a https guoyanzhang blog csdn net
  • 4种整流电路、5种滤波电路

    目录 基本电路变压电路整流电路半波整流电路全波整流电路桥式整流电路倍压整流电路 滤波电路电容滤波电路电感滤波电路RC滤波电路LC滤波电路有源滤波电路 整流滤波电路总结常用整流电路性能对照常用无源滤波电路性能对照电容滤波电路输出电流大小与滤波

随机推荐

  • 焊接技巧(热风枪/QFP/QFN/SOP/穿孔/烙铁头/助焊膏/连锡/飞线/回流焊)

    https www bilibili com video BV1wJ411B73v p 61 1 amp vd source 61 cc0e43b449de7e8663ca1f89dd5fea7d
  • C语言如何跳出多重循环

    目录 前言一 题目示例二 解决方法1 使用goto语句2 使用状态标志 总结 参考 xff1a https blog csdn net qq 45797595 article details 122278580 ops request mi
  • 第一个hadoop入门程序WordCount

    要导入hadoop文件夹中share下的common文件夹中的几个包和lib下的包 xff0c 以及mapreduce中相应的包 package com yootk mr demo import java io IOException im
  • 4种版本控制工具

    1 Visual Source Safe VSS xff09 VSS是美国微软公司的产品 xff0c 是配置管理的一种很好的入门级的工具 xff08 window系统 xff09 VSS的配置管理的功能比较基本 xff0c 提供文件的版本跟
  • 1. STM32学习 STM32综述

    什么是STM32 STM32是ST公司基于ARM Cortex M内核开发的32位微控制器 MCU 学习使用的是STM32F1系列 xff0c 内核为Cortex M3 STM32功能强大 性能优异 片上资源丰富 功耗低 xff0c 是一款
  • React 列表 & Keys

    列表 amp Keys 列表 React 列表可以使用 JavaScript 的 map 方法来创建 如下 xff1a span class token operator lt span span class token operator
  • [转载]电机 螺旋桨 电池之间的关系(普及版)

    http blog sciencenet cn blog 39356 509001 html 电机KV值 xff1a 电机的转速 xff08 空载 xff09 61 KV值X电压 xff1b 例如KV1000的电机在10V电压下它的转速 x
  • stm32 FreeRTOS 某个任务一直不被运行

    在用FreeRTOS操作系统时 xff0c 发现某一个任务一直不被运行查找后发现问题出在四个点 xff1a xff08 1 xff09 任务资源调用冲突 xff0c 当时在用两个任务去操作同一个串口 xff0c 发现任务在刚刚开始的时候 x
  • FreeRTOS 任务不切换可能的问题

    1 时间片调度没有打开 FreeRTOS h 文件中宏定义 configUSE TIME SLICING 没有定义为1 解决方案 xff1a ifndef configUSE TIME SLICING define configUSE TI
  • 通俗易懂的IMU讲解,这一篇就够了

    IMU技术的出现弥补了GPS定位的不足 xff0c 两者相辅相成 xff0c 可以让自动驾驶汽车获得最准确的定位信息 IMU全称inertial measurement unit xff0c 即惯性测量单元 xff0c 它由三个单轴的加速度
  • ubuntu16.04查看硬盘分区使用情况

    方法一 xff1a xff08 推荐 xff09 1 左上角的dash菜单 xff0c 搜索 gnome system monitor 打开磁盘工具 2 在 文件系统 中可以列出已经挂载打开的分区的使用情况 方法二 xff1a 1 左上角的
  • 【ORB-SLAM2】(三):单目摄像头+ROS+ORB_SLAM2实时测试

    介绍 xff1a 首先启动一个单目摄像头 xff0c 其次发布节点话题 usb cam image raw xff0c 最后ORB SLAM2订阅摄像头数据进行处理 xff08 这里需要修改相应的源文件里的话题类型 xff0c 其默认值为
  • vscode如何更换主题

    1 打开Vscode xff0c 点击 文件 首选项 颜色主题 快捷键 xff1a 先按Ctrl 43 K 再按Ctrl 43 T 2 打开主题设置面板 xff0c 在深色主题中点击 深色 3 这样就可以把主题改为 深色 这样Vscode界
  • CSDN写博客更改代码颜色为白色代码样式

    一 背景 在平时发博客时 xff0c 代码块背景默认是黑色的 xff0c 而注释是黑色的 xff0c 总是看起来很不清楚 直接上图 xff1a 注释看起来很不清晰 xff0c 现在我们修改一下颜色为白色 直接上图 xff1a 下面是具体设置
  • win10安装Ubuntu16.04双系统

    下载Ubuntu16 04 xff1a 下载地址 xff1a 官网 xff1a Ubuntu 16 04 7 LTS Xenial Xerus 阿里云开源镜像站 ubuntu releases 16 04安装包下载 开源镜像站 阿里云 中科
  • SLAM后端--滤波方法和非线性优化方法

    SLAM的后端一般分为两种处理方法 xff0c 一种是以扩展卡尔曼滤波 xff08 EKF xff09 为代表的滤波方法 xff0c 一种是以图优化为代表的非线性优化方法 不过 xff0c 目前SLAM研究的主流热点几乎都是基于图优化的 滤
  • React 组件 API

    常用 React 组件 API xff1a 设置状态 xff1a setState替换状态 xff1a replaceState设置属性 xff1a setProps替换属性 xff1a replaceProps强制更新 xff1a for
  • 浅析SATA Physical Layer物理层OOB信号

    一 SATA物理层概述 说OOB之前 xff0c 首先得了解一下SATA结构以及物理层的含义 SATA主要包括 xff1a 应用层 Application Layer 传输层 Transport Layer xff0c 链路层 Link L
  • CodeBlocks 20.03下载及安装指南 使用自带MinGW进行环境配置

    原本用的好好的CodeBlocks 17 12 xff0c 今天手欠无聊去搜了一下官网发现两年都没更新的cb竟然在这两天更新了 对于一直喜欢用最新版的我 xff0c 一定要更新 xff0c 然后 我还把之前的各项配置都删掉了 好吧 xff0
  • 程序是从main主函数开始运行吗?

    很多人开始学计算机语言 xff0c 编写代码时都会有一个疑问 xff1a 程序真的是从main主函数开始的吗 xff1f 之前什么都不做吗 xff1f main结束后就不能执行其他函数了吗 xff1f 下面本篇文章就为此问题做一个简单的解释