C語言學習筆記(一)

2021-08-19 20:18:11 字數 3119 閱讀 4421

預處理指令

巨集定義(#define, #undef),檔案包含(#include),條件編譯(#ifdef, #if, #elif,#else,#endif)

#define disk_capacity (sides*               \

tracks_per_side* \

sectors_per_track \

bytes_per_sector)

對於帶引數的巨集定義而言,類似於這樣的引數是有***的:

i++

來看一下下面這個神奇的操作:

#define print_int(n) printf(#n" = %d\n", n)

int main()

上面這段**中的巨集在經過預處理之後是這樣的:

printf("g"

" = %d\n", n);

在c語言中,兩個相鄰的字串會被合併,也就是說,上面的**段為:

printf("g = %d\n", n);
輸出結果為:

#運算子會巨集將的乙個引數轉換為字串字面量,也就是說,n會被替換成g這個字元

再來看一下##運算子

#include

#define print_int(n) printf(#n" = %d\n", n)

#define mk_id(n) i##n=0

int main()

輸出結果:

##運算子可以將兩個計號(識別符號)粘結在一起,可以看到上面**中的mk_id(n)巨集,會把穿進去的引數和i連線在一起,成為了變數in,使用這個巨集,我們就能快速定義並初始化一系列變數

__line__    被編譯檔案的行號

__file__ 被編譯的檔名

__date__ 編譯的日期

__time__ 編譯的時間

__stdc__ 如果編譯器符合c標準(c89或c98),那麼其值為1

c語言中是允許空的巨集引數的

_fun_識別符號

#include 

#define function_called() printf("%s called\n", __func__);

void fun()

int main(void)

_fun_表示呼叫自己的是哪個函式

條件編譯中的所有關鍵字:

#if

defined

#ifdef

#elif

#else

#endif

條件編譯多在除錯的時候會用到:

#include 

#define debug 1

int main(void)

#include

*******************************************

#define debug 0

int main(void)

*******************************************

#include

#define debug

int main(void)

我們可以通過控制debug巨集的定義與否來控制是否輸出中間結果

注意使用#if debug的時候,判斷結果跟debug是有關的,0的時候為1的時候為

但在使用#if defined debug或者ifedf debug的時候,是不需要對debug作準確的定義的,defined(ifdef)只是檢查debug是否被宣告為乙個macro

#ifdef debug = #if defined debug
這兩句話是完全等價的,

C語言學習筆記(一)

c 語言只提供了以下幾種基本資料型別 char 字元刑占用乙個位元組,可以存放本地字符集中的乙個字元 int整型 通常反應了所用機器中整數的自然長度 float 單精度浮點型 doule 雙精度浮點型 此外,可以在這些基本資料型別的錢買年加上些限定符。short 與long 兩個限定符用於限定整型 ...

C語言學習筆記(一)

進製問題 1 進製 2進製 8進製 10進製 16進製制 2進製 進製規則是逢二進一,1 二進位制轉十進位制 方法 按權展開求和 二進位制怎麼會有小數點 例 規律 個位上的數字的次數是0,十位上的數字的次數是1,依次遞增,而十 分位的數字的次數是 1,百分位上數字的次數是 2,依次遞減。注意 不是任...

c語言學習筆記一

資料型別 基本型別 整型 整數 2 15 2 15 1 32768 32767 八進位制 0開頭 十六進製制 0x開頭 十進位制 占用2個位元組,16個二進位制位 浮點型 單精度 雙精度 浮點小數 雙精度 1.23 2.1e2 2.1 12 字元型單個字元 a 佔乙個位元組 轉義字元 n 單引號 s...