为了能到远方,脚下的每|

nxgy

园龄:6年2个月粉丝:0关注:9

23 main 函数与命令行参数

1 main 函数的概念

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

2 main 函数的本质

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

3 main 函数的参数

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

    int main()
    int main(int argc)
    int main(int argc,char* argv[])
    int main(int argc,char* argv[],char* env[])
    • argc :命令行参数个数
    • argv :命令行参数数组
    • env :环境变量数组
  • gcc 编译器的常见用法

    gcc a.c b.c c.c
    • argc :4
    • argv[0] :gcc
    • argv[1] :a.c
    • argv[2] :b.c
    • argv[3] :c.c
  • main 函数的参数示例

    • Demo

      #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 函数一定是程序执行的第一个函数么?

    • 看情况:如果使用了 gcc 编译器的属性关键字,那么可以指定在 main 函数之前执行一个函数
  • gcc 中的属性关键字

    • Demo

      #include <stdio.h>
      #ifndef __GNUC__
      #define __attribute__(x)
      #endif
      //gcc属性关键字
      __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;
      }
    • 编译

    • 运行

      before_main
      main
      after_main

本文作者:nxgy

本文链接:https://www.cnblogs.com/bky-hbq/p/13744672.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   nxgy  阅读(276)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起