33主な機能のコマンドラインパラメータ

注:のみ、私的使用の場合、主に「Ditaiソフトウェア・アカデミー」のブログノートからブログの内容。

テスト環境:Ubuntuの10.10

GCCのバージョン:4.4.5

 

まず、主な機能の概念

1)C言語の機能は、呼び出された主な機能

2)からCプログラムのメイン関数が実行を開始します

        正しい以下の主な機能の定義?

A:正しいです

B:右

C:右

D:右

编程实验
main函数的原型究竟是什么
33-1.c
 
int main()
{
    return 0;
}

第二に、の性質の主な機能

1)  主な機能は、オペレーティングシステムコールの関数であります

常に2)オペレーティング・システムのメインとしての機能アプリケーションの始まり

3)OS メイン関数の戻り値としてプログラムの終了ステータス

         思考:

         なぜCのコンパイラがサポートする非常に多くの異なるメイン関数のプロトタイプ?

多くのコンパイラは、より柔軟なプログラミングに適応するために、プログラミングにより助長ようにするためには、コンパイラの最適化は、常に改善、商用競争に存在します。

编程实验
main函数的返回值
33-2-A.c
#include <stdio.h>
 
int main()
{
    printf("I'm A!\n");
    return 0;
}

操作:

1)GCC 33-2-Acは33-2-a.outの結果を印刷し、正しく構築され-o:

I'm A!

 

33-2-B.c
#include <stdio.h>
 
int main()
{
    printf("I'm B!\n");
    return 99;
}

操作:

1)GCC 33-2-BCは33-2-B.OUTは結果を印刷、正しく構築され-o:

I'm B!

2)メイン関数リターンをGCCで値を表示する方法。

命令:echo $?
显示:99

 

第三に、パラメータの主な機能

プログラムは、主な機能を実行する1)パラメータを渡すことができます

int main()
int main(int argc)
int main(int argc,char *argv[])
int main(int argc,char *argv[],char *env[])
argc-命令行参数个数
argv-命令行参数数组
env-环境变量数组

2)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函数的参数
33-3.c
#include <stdio.h>
 
int main(int argc, char* argv[], char* env[])
{
    int i = 0;
   
    printf("============== Begin argv ==============\n");
   
    printf("argc = 1");
    
    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;
}

操作:

1)gccの33-3.c -o 33-3.outコンパイル正しく、結果を印刷します:

====== Begin argv ======
argc = 1
./33-3.out
====== End argv ======



======= Begin env ======
====== End env ======

分析:

        コマンド:./ 33-3.outのargv [0] = "./33-3.out" ./ 33-3.out ==> ARGC = 1パラメータに

 

2)命令:./ 33-3.out交流BCのCC

====== Begin argv ======
argc = 4
./33-3.out
a.c
b.c
c.c
====== End argv ======



======= Begin env ======
====== End env ======

 

第四に、ヒント

小問1)インタビュー

         主な機能は、機能プログラムDOの最初の実行でなければなりませんか?

必ずしもそうではありません。gccの下のキー属性があります。

__attribute__((constructor)):main函数之前执行
__attribute__((destructor)):main函数之后执行

 

实例分析
gcc中的属性关键字
33-4.c
 
#include <stdio.h>
 
#ifndef __GNUC__            //如果不是gcc编译器,就定义宏
#define __attribute__(x)
#endif
 
__attribute__((constructor))  // constructor给before_main函数一个属性,提示编译器运行main()先执行defore_main()
void before_main()
{
    printf("%s\n",__FUNCTION__);       //标准的c中__FUNCTION__代表函数名
}
 
__attribute__((destructor))   // destructor给after_main函数一个属性,提示编译器运行完main()函数后执行defore_main()
void after_main()
{
    printf("%s\n",__FUNCTION__);
}
 
int main()
{
    printf("%s\n",__FUNCTION__);
   
    return 0;
}

操作:

1)gccの33-4.c -o 33-4.outコンパイル正しく、結果を印刷します:

before_main
main
after_main

 

要約:

1)からCプログラムのメイン関数が実行を開始します

2)  主な機能は、オペレーティング・システム関数呼び出し

3)  機能は有しパラメータ戻り値を

4)  最近のコンパイラをサポートし、メイン関数の前に呼び出し、他の関数を(ライト・コードへのコンパイラに依存しないようにしよう!)

 

公開された40元の記事 ウォンの賞賛1 ビュー1748

おすすめ

転載: blog.csdn.net/piaoguo60/article/details/104081582