王老師 預處理

2021-04-07 07:45:27 字數 1882 閱讀 3033

1.巨集定義

語法: #define 巨集名字[(形參表)] 替換文字

其中,巨集名字是乙個識別符號;

形參表為:(形參名1, 形參名2,...形參名n), 沒有型別;

替換文字是一串字元.

巨集呼叫和函式呼叫不同,是把程式中所有巨集呼叫 "巨集名字(實參表)", 用替換文字(實參代替形參)代替.

沒有函式的跳轉過程.

例如:#define mul(x, y) ((x) * (y))

注意:此處必須加括號,否則,

(1)mul(x - 1,  y + 1);  展開為 x - 1 * y + 1;  //內層必須加()

(2)1 / mul(x, y);  展開為1 / x * y;  //外層也必須加()

另外,替換時,實參盡可能不要有***.

例如:

#define max(x, y) ((x) > (y) ? (x) : (y))

max(x++, y)  展開為 ((x++) > (y) ? (x++) : (y))

2.檔案包含

#include "檔名"

標頭檔案(*.h)一般包含:

型別定義,巨集定義,函式原型,外部變數定義.

呼叫其它檔案中函式的**,是在link的過程中由linker將*.obj檔案進行link處理的.

3.條件編譯

#if 條件1

**1#else 條件2

**2#endif

4.引數個數不確定的函式

形參表寫法:(形參型別1 形參名1, ..., 形參型別n  形參名n, ... )

在程式中如何獲取不確定的引數?

函式庫提供了 stdarg.h, 乙個型別, 2個巨集.

typedef void * va_list;  //va_list是乙個指標型別

va_start(p, para);         //para是最後乙個確定引數的名字,這個巨集給指標變數p賦初值,指向第乙個不確定的引數

變數 = va_arg(p, 型別說明符); 

//取出p所指的不定引數的值,型別說明符說明了這個值的型別,同時p自動的改指下乙個可變引數.

示例程式**如下:

#include "stdio.h"

#include "stdarg.h"

#include "stdlib.h"

void scanf_e(char *c, ...)

c++;}}

void main()

《補充》

找了一下源**, .

#define _intsizeof(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

#define va_start(ap,v) ( ap = (va_list)&v + _intsizeof(v) )

#define va_arg(ap,t) ( *(t *)((ap += _intsizeof(t)) - _intsizeof(t)) )

#define va_end(ap) ( ap = (va_list)0 )

這裡的巨集 _intsizeof(n) 挺有意思。

例如:

#include

struct student

; struct student s1, s2;

#define size(n) ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1))

int main()

輸出結果:

4373256

4373280

24 相差24個位元組,而不是3 * 4 + 10 = 22個。

巨集_intsizeof(n) 達到此目的。

牛。

王老師 C 類模板

1.定義語法 template 模板參數列 class 類名 類體 注 模板型別引數 typename id 模板非型別引數 例如 int n 類體中可以出現的型別有 a.基本資料型別 b.使用者自定義型別 c.模板型別引數 d.類名 2.模板例項化 1 從類模板生成具體類的過程 2 時機 定義物件...

王老師 C 類的繼承

1.類的繼承 語法 class 匯出類名 繼承方式 基類名1,繼承方式 基類名n 類體 繼承方式有public,protected,private三種.匯出類物件構成 1 基類的物件 2 匯出類部分.匯出類中成員的訪問許可權,如下表所示.繼承方式 基類private成員 基類protected成員 ...

王老師喜歡哪張牌?

結論 王老師喜歡方塊五 a 我不知道是哪張 解讀 王老師喜歡的牌同點色有不同花色 排除 黑桃 2,3,7,8,j 梅花 6,k 剩餘 黑桃 4 紅桃 a,4,q 梅花 4,5,q 方塊 a,5 b 我知道你不知道,但是我也不知道 解讀 說明同色的所有的牌都有其他顏色存在,並且同色牌不止1張 eg 如...