zoukankan      html  css  js  c++  java
  • [ASM C/C++] C语言的main 函数

    C语言有两种可能的运行环境

    1. 独立(freestanding)

    在独立环境中,C程序执行不需要操作系统的支持,因此只具有最小的链接库能力。

    2. 宿主(hosted)

    在宿主的环境中,C程序会在操作系统的控制下执行,并且会使用操作系统所提供的支持,具有完整的标准链接库能力。

    为宿主环境而编译的程序必须定义一个名为main的函数,这是程序开始时调用的第一个函数。

    main 函数的定义有两种形式:

    int main(void){} // 没有参数, 返回int.

    int main(int argc, char *argv[]){} // 两个参数,返回int .

    另外许多C的实现还支持以下定义

    int main(int argc, char *argv[], char *envp[]) //三个参数,一个int,两个char **, 返回int.

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdarg.h>
    
    
    /*  参数argc 和 argv 代表程序的命令行自变量
        argc : argument count  值如果不是0,就是命令行中字符串的数量,程序本身名字也算在内。
        argv : argument vecto  一个char指针数组,每个指针指向命令行中的字符串。
        envp : 环境指针; 是一个指针数组,指向组成程序环境的字符串。C中可用getenv()函数取得这些环境变量。
    */
    int main(int argc, char *argv[], char *envp[])
    {
        printf("argument count is: %d  %s 
    ", argc, argv[0]);
    
        for(int i=1; i<argc; i++)
        {
            printf("the %d argument is: %s 
    ", i, argv[i]);
        }
    
        for(int i=0; envp[i] != ''; i++)
        {
            printf("the env argument is: %s 
    ", envp[i]);
        }
    
        // get the env argument
        char *env = getenv("USER");
        printf("%s 
    ", env);
    }

    执行结果:

    mac-abeen:asm_c abeen$ gcc arg.c 

    
    

    mac-abeen:asm_c abeen$ ./a.out

    
    

    argument count is: 1  ./a.out 

    
    

    the env argument is: TERM_PROGRAM=Apple_Terminal 

    
    

    the env argument is: SHELL=/bin/bash 

    ......

    abeen 

    
    
    
     
  • 相关阅读:
    在非控制台程序中打印出printf
    如何将动态链接库(C++ DLL)中的printf显示在其被调用的程序控制台上
    Android NDK Build 参数
    查找包含××××××字符的文件名
    Ubuntu安装Fcitx(小企鹅五笔输入法)
    查询所有表的记录数SQLServer
    查询某个表或者所有表的字段说明 SQLServer
    安卓64位Ubuntu的32位包安装
    gen already exists but is not a source folder ZT
    mysql中查看datadir目录
  • 原文地址:https://www.cnblogs.com/abeen/p/4251657.html
Copyright © 2011-2022 走看看