Linuxの下でC言語のプログラミング

18924 ワード

Linux環境でのC言語プログラミング


1 .シーケンス


筆者はまたブログを更新しに来ました.Flagを立てるたびに1週間に1回ブログを更新すると言っていましたが、いつも引きずっていました.最後に4月に1回しか更新していません.4月にまたぼんやりと1ヶ月を過ごしたことを説明していますが、喜ばしいことに筆者は4月に実習の仕事を探して、中で組み込みソフトウェアの開発をして、現在QTの開発を担当しています.筆者の現在のLinux環境はubantu 16である.04,gnomeデスクトップ環境,Linuxシステムの使用時間が長くなると審美疲労が生じるため,筆者はMacOSのテーマ環境を変え,やはりインタフェースが一新され,楽しくプログラミングできるようになった.デスクトップ環境図を添付します.

2.Vimの関連操作


Linuxの下で各种のファイルの配置情报、どうしてもエディタを使うことができて、Vimは1种の强大なエディタで、もちろんC言语のプログラミングもVimエディタの入力を必要として、多くの人はVImの操作が面倒で、多くの命令を覚えにくいと思って、しかし笔者はよく使ういくつかの命令だけを覚えてこれらに対応するのに十分だと思っています.

(1)コマンドラインモード、


カーソルの移動、コピー、貼り付け、取り消しの削除などの操作を行います.Ctrl+経由[コマンドラインモードに戻ることができます.カーソルの移動は上下左右のキーで移動しますが、もちろんk j h lで移動することもできます.アルファベットキーで文字移動を行う場合は、その前に数字を付けて、対応するドロップダウンで移動することを示すことができます. u:取り消し

(2)挿入モード、


  挿入モードでのみ文字の入力が可能で、アルファベットiで挿入モードに入ることができ、正常に操作できるようになりました.wordの操作と同じようになりました.そして、前述したように、Ctrl+[挿入モードを終了し、コマンドラインモードに入ることができます.

(3)下行モード


  挿入モードを終了した後、:を押して下行モードに入ることができ、下行モードではファイルの保存と終了を行うことができます.  :q:保存せずにvimエディタを直接終了します.   :q! :強制終了vimエディタは保存されません.   :wq:vimエディタを終了します.

3.C言語プログラミング


C言語のプログラミングでは、必ず実行可能ファイルにリンクする必要があります.もちろん一般的なC言語の実行過程には、前処理→コンパイル→アセンブリ→リンク→実行可能ファイルが必要です.Linux環境では、gccを使用してリンクをコンパイルして実行可能ファイルを生成できます.
  • の前処理は、以下に示すように、前処理後、コンパイラは、含まなければならないヘッダファイルをコンパイルする.iファイルにあります.-E
  • #include
    int main()
    {
      int i,j;
      for(i=0,j=5;i<j;i++)
        printf("%d Hello World!",i);
      return 0; 
    }
    
    gcc test.c -o test.i -E
    
    extern int pclose (FILE *__stream);
    extern char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__));
    #912 "/usr/include/stdio.h" 3 4
    extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
    extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;
    extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
    #942 "/usr/include/stdio.h" 3 4
    #2 "test.c" 2
    #2 "test.c"
    int main()
    {
      int i,j;
      for(i=0,j=5;i<j;i++)
        printf("%d Hello World!",i);
      return 0;
    }
    
  • のコンパイル段階は、コンパイラがソースコードをコンパイルすることである.sアセンブリプログラムは、点けてみてもいいです.sファイルを確認してください.-s
  • gcc test.i -o test.s -S
    
    .LC0:
            .string "%d Hello World!"
            .text
            .globl  main
            .type   main, @function
    main:
    .LFB0:
            .cfi_startproc
            pushq   %rbp
            .cfi_def_cfa_offset 16
            .cfi_offset 6, -16
            movq    %rsp, %rbp
            .cfi_def_cfa_register 6
            subq    $16, %rsp
            movl    $0, -8(%rbp)
            movl    $5, -4(%rbp)
            jmp     .L2
    
  • アセンブリアセンブリアセンブリ言語ソースプログラムをターゲットファイルにアセンブリします.-c
  • gcc test.s -o test.o -c
    
  • リンクターゲットプログラムを対応するライブラリ関数にリンクして実行可能ファイルを生成し、その後実行すると、関数機能が正しく実行されたことがわかります.
  • gcc test.o -o test
    ./test
    0 Hello World!1 Hello World!2 Hello World!3 Hello World!4 Hello World!
    

    *****ただし、通常は、実行可能ファイルを生成して実行できます.
    gcc test.c -o test
    ./test 
    0 Hello World!1 Hello World!2 Hello World!3 Hello World!4 Hello World!
    

    makefileファイルの使用


      もちろんこれは単一ファイルのC言語で実行するものであり、複数のファイルのコンパイルに関わる場合はコンパイル順序に注意する必要があり、呼び出されたファイルは先にコンパイル生成する必要がある.oファイル、そして呼び出し関数に合わせる.oファイルとともに実行可能ファイルを生成する.次に栗をあげます.主関数cファイル、主にサブファイルを含む:print.c、hello.c、Add.cファイルは、すべてメイン関数で呼び出されます.
    #include
    #include"print.h"
    #include"hello.h"
    #include"Add.h"
    int main()
    {
     int a,b;
      hello();
      printf("         
    "
    ); scanf("%d
    %d"
    ,&a,&b); int c=Add(a,b); print(c); printf("
    !"
    ); printf(" make !
    "
    ); return 0; }

    hello.cとhello.hファイル:主に印刷で、最初のコンテンツ出力を担当します.
    #include"hello.h"
    void hello()
    {
      printf("hello,world,      make  !
    "
    ); } // hello.h , 。 #include void hello();

    print.cとprintf.hファイル:主に印刷を担当し、もちろんprintfを直接使用することができます.ここでは、実行可能なファイルを生成するコンパイル順序を説明するためです.
    #include
    #include"print.h"
    void print(int c)
    {
       printf("c=%d ",c);
    }
    
    //    print.h   ,              。
    #include"stdio.h"
    void print(int c);
    

    Add.cとAdd.hファイル:主に入力した2つの数を加算し、出力結果を返し、主関数で呼び出す.
    #include
    #include"Add.h"
    int Add(int a,int b)
    {
       int c=a+b;
       return c;
    }
    //    Add.h   ,              。
    #include"stdio.h"
    int Add(int a,int b);
    

    メイン関数で先に呼び出されたhelloのため.cファイルだからhelloをコンパイルしなさいc生成oファイル、もちろんAddをコンパイルしてください.cまたはprint.cも可能です.彼ら3人は互いに呼び出していないので、hello.c printを呼び出す.cの関数は、printをコンパイルする必要があります.cファイルをコンパイルしてからhello.cファイル.その後、生成されたターゲットファイルをリンクして、対応するライブラリに実行可能ファイルを生成します.次に、実行リンクを順番にコンパイルしてプログラムを実行します.
    gcc hello.c -o hello.o -c
    gcc Add.c -o Add.o -c
    gcc print.c -o print.o -c
    gcc test.c -o test.o -c
    
    gcc test.o print.o hello.o Add.o -o test
    
    ./test
    
    hello,world,      make  !
             
    12
    34 
    c=46 
      !    make   !
    

    少し嬉しかったかどうか、自分は今日やっと収穫があって、進歩はこのように少しずつ来ました.  もちろんプログラムを修正するたびにこのようにコンパイルしなければならないのではないでしょうか.時間がもったいないと思いますか.もちろん、これはいくつかのファイルしかありません.百以上のファイルが現れたら、コンパイル命令に時間がかかるのではないでしょうか.デバッグが面倒なので、makefileファイルが現れました.makefileファイルには主にあなたのプログラムのコンパイル命令が入っています.makeを通じてmakefileファイルの命令を直接実行することができます.コンパイルを行い、ファイルごとにゆっくりコンパイルする必要はありません.次にmakefileファイルの作成ルールを見てみましょう.まず自分で書いたばかりの工事のmakefileファイルを置きます.
    test:test.o Add.o hello.o print.o 
    	gcc -o test test.o Add.o hello.o print.o 
    test.o: test.c Add.h hello.h print.h
    	gcc -c test.c -o test.o
    Add.o: Add.c Add.h
    	gcc -c Add.c -o Add.o
    hello.o: hello.c hello.h
    	gcc -c hello.c -o hello.o
    print.o: print.c print.h
    	gcc -c print.c -o print.o
    clean:
    	rm *.o test
    

      最上階は自分が最後に生成したターゲットファイル、すなわち実行可能ファイルtestを書く必要があります.感嘆符の後ろには実行可能ファイルを生成するために必要なターゲットファイルがあります.以下は実行可能ファイルを生成する命令で、すべてのターゲットファイルをリンクして実行可能ファイルを形成する必要があります.次はターゲットファイルの生成であり、-cという命令を用いて、各.cファイルはすべて生成する.oファイルでいいです.最後の行は、生成をクリアする.oファイル.次にmakefileコマンドでコンパイルします.makeの後、コンパイラに対応する出力が表示され、実行可能なファイルtestが表示されます.
    make
    #     
    gcc -c test.c -o test.o
    gcc -c Add.c -o Add.o
    gcc -c hello.c -o hello.o
    gcc -c print.c -o print.o
    gcc -o test test.o Add.o hello.o print.o
    
    ./test
    
    hello,world,      make  !
             
    12 34
    c=46 
      !    make   !
    
    

    make
    #     
    make: ***             makefile。   。
    
    make -f MakeFile
    #     
    make: 'test' is up to date.
    

    2つ目はmakefileファイルがコンパイル命令を書くとき(2行目のgccの行)、Tabキーを使ってスペースを空ける必要があります.そうしないとエラーが発生します.