C文法総括基礎文法と大型プログラムの作成



 
ソースファイルとヘッダファイル
ソースファイルの拡張子は.c最後に、各ソースファイルには関数と変数定義が含まれ、そのうちの1つのソースファイルにはmain()関数が含まれます.
複数のソースファイルはいくつかの変数と関数を共有することができ、#include命令によって含まれる.この含まれるファイルはヘッダファイルであり、拡張子は.h
//    c          
#include <   >

//           
//                ,                  ,
//         
#include "   "

//#include    ,             ,           
//      
#if defined (IA32)
    #define CPU_FILE "ia32.h"
#elif defined (IA64)
    #define CPU_FILE "ia64.h"
#elif defined (AMD64)
    #define CPU_FILE "amd64.h"
#endif
#include CPU_FILE


//     
//  file1.h    file3.h
//file2.h    file3.h
//prog.c      file1.h   file2.h
//                    。          ,  
//       ,       ,               
//         ,   #ifndef   #endif          
#ifndef BOOLEAN_H
#define BOOLEAN_H
#define   TRUE  1
#define    FALSE  0
    typedef  int Bool;
#endif
//             BOOLAN_H          #ifnedf #endif       。          ,       #ifnedf #endif         


//#error          ,               ,    
//         C89          ,            
//      ,         #ifdef     __STDC__ 
#ifnedf __STDC__
#error This header requires a Standard C compiler
#endif


 
ヘッダファイルは関数プロトタイプを共有できます
他のファイルで定義された関数funが呼び出されると.コンパイラが呼び出しの間に関数のプロトタイプを常に確認するには、コンパイラがない場合はデフォルトのintタイプを返し、パラメータ数と関数fun呼び出しの実際のパラメータが一致すると仮定します.
共有変数宣言
ヘッダファイルは、#includeコマンド、すなわち他のヘッダファイルを含むこともできる
 
 
マルチファイルプログラムの構築
1.コンパイルするには、プログラム内のソースファイルごとにコンパイルする必要があります(ヘッダファイルをコンパイルする必要はありません.ヘッダファイルを含むソースファイルをコンパイルすると自動的にコンパイルされます
ヘッダファイルの内容).各ソースファイルについて、コンパイラはターゲットコードを含むファイルを生成します.これらのファイルは
ターゲットファイル、unixシステムでの拡張子は.o,windowsシステムにおける拡張子は.ojb
2.リンク、コネクタは、前のステップで生成したターゲットファイルとライブラリ関数のコードを組み合わせて実行可能なプログラムを生成します.コネクタの役割
は、コンパイラが残した外部参照の問題(外部参照が1つのファイルで発生した関数が別のファイルで定義されたものを呼び出す)を解決するためです.
関数または別のファイルで定義された変数にアクセスする場合)
 
makefile
justify: justify.o    word.o    line.o
            gcc -o justify    justify.o    word.o    line.o
justify.o: justify.c     word.h    line.h
               gcc -c justify.c
word.o:  word.c    word.h
               gcc -c word.c
line.o:  line.c  line.h
            gcc - c line.c

各グループはルールとなり、各ルールの最初の行にはターゲットファイルが与えられ、後で依存するファイルが与えられます.
2行目は実行するコマンドです(ターゲットファイルに依存するファイルが変更された場合、ターゲットファイルを再構築する必要があります.この場合、2行目のコマンドを実行します)
  make:
make   
make justify
makt install
       make         ,              

 
コンパイル中のエラー
1.スペルミス.変数名または関数名のスペルミスが発生した場合、コネクタは欠落レポートを作成します.列は、プログラムで定義された関数です.
   read_char、しかし呼び出す時それをread_と書きますCahr、リンクはread_が欠けていると報告します.char関数
2.コネクタにファイルfooが見つからない場合、ファイルが欠落する.cの関数は、このファイルを知らない可能性があります.このときmakefileをチェックします
あるいはfooを確保するために工事書類がある.cファイルはリストされています.
3.ライブラリが欠落すると、リンクはプログラムで使用するすべてのライブラリ関数を見つけることができず、unixシステムの1つがの古典的な例は、
プログラムにこのヘッダファイルを簡単に含めるには十分ではありません.多くのunixバージョンでは、プログラムをリンクするときにオプション-lmを指定する必要があります.これにより、コネクタが削除されます.
関数のコンパイラバージョンのシステムファイル.このオプションが適用されないと、リンク時に
「undefined reference」メッセージ.
 
プログラム外でのマクロの定義
GCCを含むほとんどのコンパイラは、コマンドラインでマクロの値を指定できるようにする-Dオプションをサポートします.
gcc -DDEBUG=1 foo.c
この例では、定義マクロDEBUGはプログラムfooにある.cの値は1である、その効果はfooに相当する.cの始まりはこう書きます
#define DEBUG 1
-Dオプションに名前が付けられたマクロに値が指定されていない場合、この値は1に設定されます.
多くのコンパイラでは、マクロの定義を削除するための-Uオプションもサポートされています.効果は#undefに相当します.-Uオプションを使用して削除できます.
あらかじめ定義されたマクロまたはコマンドライン方式で-Dオプションで定義されたマクロ.
 
 
オブジェクト向けのパッケージングを実現
#define    publ/ic    /* empty */
#define    private  static

private void terminate(const char *message) { ....}
public bool is_empty(void){....}

 
 
 
C言語のキーワード
auto break case char const continue
default do double else enum extern
float for goto if int long
register return short signed sizeof static
struct switch typedef union unsigned void
volatile while

//1999 12 16 ,ISO   C99  ,      5 C     :
inline restrict _Bool _Complex _Imaginary
//(  bool     C      )

//2011 12 8 ,ISO  C      C11,      7 C     :
_Alignas _Alignof _Atomic _Static_assert _Noreturn _Thread_local _Generic

 
 
 
 
C 89の標準ライブラリ
ヘッダファイル名
意味

診断、プログラムに自己検査を挿入できます.検査に失敗すると、プログラムは終了します.

文字処理、文字分類および大文字と小文字の変換に使用する関数を提供する

浮動小数点タイプの特徴で、errnoを提供します.これは左の値で、特定のライブラリ関数を呼び出した後にチェックして、呼び出し中にエラーが発生したかどうかを判断することができます.

整数タイプのサイズで、整数タイプの特徴を記述するマクロを提供します.最大値と最小値が含まれます.

ローカリゼーションは、特定の国または地域の動作方法に関する関数ヘルプを提供します.ローカリゼーションに関連するこれらの動作には、数値の表示方法、通貨のフォーマット、文字セット、日付と時間の表示動作が含まれます.

三角関数,双曲線関数,指数関数,対数関数,べき乗関数,近接整列関数,絶対値演算関数および余剰関数を含む一般的な数学関数を提供する数学計算

ローカルジャンプではなく、setjmp関数とlongjmp関数が提供され、setjmp関数はプログラムの1つの位置をマークし、longjmpでマークされた位置を返すことができます.これらの関数は、1つの関数から別の関数にジャンプするために使用できますが、通常の関数戻りメカニズムを迂回すると、setjmp関数とlongjmp関数は主にプログラム実行中に発生する深刻な動作を処理します.

信号処理は、異常(信号)を処理するための関数を提供し、割り込みと運転時エラーを含む.signal関数は、所与の信号が発生した後にシステムが自動的に呼び出す関数を設定することができる.raise関数は情報を生成するために使用されます

printfやscanfのように数個の数の可変関数を記述するためのツールを提供する可変パラメータ

よく使われる定義で、よく使われるタイプとマクロの定義を提供します.

入力出力、大量の入力/出力関数を提供し、順次アクセスとランダムアクセスファイルの操作を含む

文字列を数に変換したり、擬似乱数を生成したり、メモリ管理タスクを実行したり、オペレーティングシステムと通信したり、検索とソートを実行したり、マルチバイト文字とワイド文字の間で変換したりするなど、他のヘッダを計画できない関数が多数含まれています.

文字列処理は、文字列操作(コピー、スペル、比較、検索)を行うための関数と、任意のメモリブロックを操作するための関数を提供します.

日付と時刻、時刻(および日付)、操作時間、フォーマット時間の表示を取得する関数
 
 
 
C 99標準ライブラリ
ヘッダファイル
意味

複素演算はcomplexとIマクロを定義し、この2つのマクロは複素演算に非常に有用であり、このヘッダは複素数を数学的に演算する関数も提供する.

浮動小数点数演算中にオーバーフローが発生したかどうかを判断するためにフラグをテストしたり、制御モードを設定してどのように調整するかを指定したりするなど、浮動小数点数状態フラグと制御モードへのアクセスを提供します. 
 
整数型フォーマット変換は、で宣言された整数タイプの入出力のフォーマット文字列のマクロであり、最大幅整数を処理する関数も提供される.
 
スペル変換は、特定の演算子(文字&,|,~,!および^)を表すマクロを定義し、プログラミング環境のローカル文字セットにこれらの文字がない場合に便利です.
 
ブールタイプと値は、bool、true、falseマクロを定義し、これらのマクロが定義されているかどうかをテストするために使用できるマクロも定義します.
 
指定した幅の整数タイプを宣言し、各タイプの最大値と最小値を指定するマクロなどの関連マクロを定義する整数タイプ.特定のタイプの整数定数を構築するためのパラメータ付きマクロも定義します.
 
汎型数学、C 99の中でヘッダ仲の多くの数学関数には複数のバージョンがあります.ヘッダ仲の汎用マクロは、それらに伝達するパラメータとタイプを検出し、対応するまたはにおける関数の呼び出し
 
拡張されたマルチバイトおよびワイド文字ユーティリティにより、ワイド文字入力/出力およびワイド文字列操作の関数が提供されます.
 
ワイド文字分類とマッピングユーティリティ、ヘッダはのワイド文字バージョンで、ワイド文字を分類して修正する関数を提供します.
 
 
参照先:
C言語キーワード
C言語の32キーワード