C言語-グローバル変数、静的ローカル変数、マクロ定義

1日の3番目の8時間を充実させましょう!

以前に見た変数のほとんどは、関数で定義されたローカル変数であることがわかりました(関数に入ったときにのみ表示され、関数を終了した後は存在しません)

グローバル変数

1.関数の外部で定義された変数-グローバル変数

1>ライフタイムとスコープはグローバルです!

2>すべての機能を使用してアクセスできます。

2.グローバル変数の初期化:

1>コンパイラは、初期化されていないグローバル変数に値0を自動的に割り当てます。(ローカル変数はランダムな値です!)

2>初期化されていないグローバルポインタはNULL値を取得します。

3>コンパイル時に既知の値のみを使用してグローバル変数を初期化します

#include <stdio.h>

int gall = 1;//定义了一个全局变量gall 值为1

int gall2 = gall;//这句不行!!!是错误的,因为编译时gall算是未知量


int main(void)
{
    ......
    return 0;
}

4>その初期化はmain()関数の前に行われます

5>グローバル変数を使用しないでください。それらの間にはいくつかの割り当て、操作などがあります。ファイル呼び出しがあるかもしれないので、混乱(順序か何か)があるかもしれません

たとえば、mainの前:

const int gall = 12; //ここにconstを追加すると、コンパイル時にgallの値がわかります。

int gall2 = gall;

そんなことしたらダメ!

2.関数内にグローバル変数と同じ名前の変数がある場合、グローバル変数は関数内に非表示になり、グローバル変数は関数から出た後に再表示されます。

これは次のように理解できます。小さな場所で大きな場所に現れた変数を再定義すると、それらは非表示になります。

静的ローカル変数

 1.ローカル変数が静的ローカル変数になる前に静的変数を追加する

2.関数を静的のままにする変数はその値を保持し、次に関数を入力したときは引き続き最後の値であり、再初期化されません(初期化は1回限りであることが理解できます)。

3.静的ローカル変数は実際にはグローバル変数です(グローバル変数、静的ローカル変数、およびローカル変数をカスタマイズして、それらのアドレスを出力すると、グローバル変数のアドレスがのアドレスに非常に近いことがわかります。静的ローカル変数ですが、ローカル変数に似ていますアドレスがとても悪いです)

4.静的ローカル変数にはグローバルな有効期間がありますが、ローカルスコープです。

グローバル変数を使用する際の注意点

1.ポインタを返す関数の場合

1>ローカル変数のアドレスを返すことは危険です。ローカル変数は関数を離れた後に存在しないためです。

2>グローバル変数と静的ローカル変数のアドレスを返すことは合法です

2.関数間でパラメーターと結果を渡すためにグローバル変数を使用しないでください!

3.グローバル変数の使用を避けるようにしてください

4.グローバル変数と静的ローカル変数を使用する関数はスレッドセーフではありません(当面は理解する必要はありません)

 

大きい

1.前処理命令をコンパイルします。

#.....。

1>最初の#記号は、前処理命令をコンパイルするためのものです

2>コンパイルおよび処理命令は使用できません;セミコロン(C言語のコンポーネントではないため、理解してください/犬の頭ですが、C言語はそれなしでは実行できず、添付されているインクルードよりもC言語のキーワードではありません)

3> #defineはマクロを定義します(古いcにはconstがなく、マクロ定義defineを使用します)

# define PI 3.14159

#define <name> <value> //値にはスペース、文字などを含めることができます。

4>コンパイル前に前処理ステップがあります

5>マクロ定義が1行を超える場合は、\バックスラッシュを使用します

# define PRINT1 printf("hong");\
                printf("hong");//这里的分号是PRINT常量里的!!!

6>マクロ定義には値がなく、条件付きコンパイルとしてよく使用されます

7>いくつかの事前定義されたマクロがあります

_FILE_
_LINE_
_DATE_
_TIME_

パラメータ付きマクロ

1.関数のようなマクロ

#define cube(x) ((x)*(x)*(x))

このようにして、次のことができます。printf( "%d"、cube(5));

実際、出力は((5)*(5)*(5))です。

2.次の点に注意してください。

すべてに括弧があります!

パラメータが表示される場所には括弧を配置する必要があります

値全体(式)には括弧が必要です

3.複数のパラメーターを取ることができます(パラメーターには括弧を含めることを忘れないでください!)

4.セミコロンを追加しないでください!

おすすめ

転載: blog.csdn.net/qq_51182221/article/details/115311132