C語言 條件編譯和static關鍵字

2021-09-11 05:15:47 字數 1807 閱讀 4603

#include #ifdef hello 

char *c = "hello world";//如果hello這個巨集存在,包含這段**

#else

char *c = "no zuo,no die"; //否則包這段**

#endif

int main()

程式想通過記住之前的值,然後不斷疊加上去:

#include int count = 0;

int counter()

int main()

再看乙個例子,這個例子是說明全域性變數,在其他原始檔確實是可以訪問到count的:

a.h

void hello();
a.c

#include #include "a.h"

int count = 100;

void hello()

test.c

#include #include "a.h"

//在使用在其他地方定義的全域性變數,要先把它宣告為外部變數

extern int count;

int main()

編譯執行:

~/desktop/mcc$ gcc a.c test.c -o test

~/desktop/mcc$ ./test

@@@@100

111

上述**用了乙個count的全域性變數,因為count全域性變數在全域性作用域,所以其他函式都可以修改它的值。如果你在寫乙個大型程式,就需要小心控制全域性變數的個數。因為它們可能導致**出錯。

好在c語言允許你建立只能在函式區域性作用域訪問的全域性變數,如test1.c:

#include int counter()

int main()

編譯執行:

~/desktop/mcc$ gcc test1.c -o test1

~/desktop/mcc$ ./test112

345上面程式中的關鍵字static會把變數儲存在儲存器的全域性變數區,但是當其他函式試圖訪問count變數時編譯器會丟擲錯誤。

**可以在函式外使用static關鍵字,它表示「只有這個.c檔案中的**能使用這個變數或函式。**如:

a.h

void hello();
a.c

#include "a.h"

#include static void good_morning(char *msg);

static int count = 100;

void hello()

static void good_morning(char *msg)

test.c

#include #include "a.h"

int main()

編譯執行:

~/desktop/mcc$ gcc a.c test.c -o test

~/desktop/mcc$ ./test

101

good morning!

102

good morning!

103

good morning!

上面這個程式的static關鍵字是用來控制變數或函式的作用域,防止其他**以意想不到的方式訪問你的資料或函式。

C語言的條件編譯

預處理程式提供了條件編譯的功能。可以按不同的條件去編譯不同的程式部分,因而產生不同的目標 檔案。這對於程式的移植和除錯是很有用的。條件編譯有三種形式,下面分別介紹 1.第一種形式 ifdef 識別符號 程式段1 else 程式段2 endif 它的功能是,如果識別符號已被 define命令定義過則對...

c語言的條件編譯

條件編譯指令將決定那些 被編譯,而哪些是不被編譯的。可以根據表示式的值或者某個特定的巨集是否被定義來確定編譯條件。一.if else elif和 endif指令 1 if 表示式 語句段1 else 語句段2 endif 例項 include include if val min int min i...

C語言條件編譯詳解

預處理程式提供了條件編譯的功能。可以按不同的條件去編譯不同的程式部分,因而產生不同的目標 檔案。這對於程式的移植和除錯是很有用的。條件編譯有三種形式,下面分別介紹 ifdef 識別符號 程式段1 else 程式段2 endif 它的功能是,如果識別符號已被 define命令定義過則對程式段1進行編譯...