dokanc.h
#define
dbgprint
(format
,...)\
do\
}while(0
) 首先,#define在多行定義的時候,每一行的結尾可以用轉義符\
轉義符後面不能有空格.
還有重要的一點: do{}while(0)這種寫法,這裡面的while不是起到迴圈的作用,而是為了在巨集定義在各種情況下都能正確的替換.比如:
#definedo_something()\
do_a();\
do_b();
這時當if(…)
do_something();
的時候,外層的
while
巢狀就能避免
if的作用範圍只在
do_a();了.
dokandbgprintw
(lpcwstr
format
,...)
可變引數函式.
引數中除了format,第二個引數」…」代表了後面的引數是可變的.比如c語言中的printf()函式.
printf(「%d %d」,a,b);或printf(「hello,%s」,s);
其中可變引數函式有幾個重點:
typedef char* va_list;
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
va_list是乙個字元指標,他是儲存引數位址的指標.
va_arg(va_list arg_ptr,prev_param);第乙個引數是va_list指標,第二個是可變引數」…」之前的最後乙個固定引數. 是對宣告的va_list指標進行初始化.
va_arg( va_listarg_ptr, type );
第乙個引數是初始化過的
va_list指標,
第二個引數是這個要獲取引數的資料型別
,然後返回要獲取的引數的值.
va_end( va_list arg_ptr );即在使用完va_list這個指標之後,將它關閉.以免發生不必要的麻煩.va_start與va_end總是應該成對出現.
例如:void fun(t format,…)
ps:函式引數的傳遞原理à函式的引數以棧的形式訪問.從右至左入棧.
mysql學習記錄 MySQL學習記錄 2
in 子查詢 select from student where id in 1,2 not in 不在其中 select from student where id not in 1,2 is null 是空 select from student where age is null is not...
java學習記錄
陣列雖然是引用資料型別,但它不是類 所以數字中沒有length 方法 只有length屬性。string型別 是乙個類 jdk中已經封裝好的類,是個final類,你可以去查api 類就有屬性和方法但是 string類中沒有length屬性,只有length 方法 1。陣列雖然是引用資料型別,但它不是...
Linux 學習記錄
1.linux 拷貝隱藏檔案 進入當前需要拷貝的目錄,即源目錄 假如 source 拷貝到 centos5.3 cd source tar cf cd centos5.3 tar xvf 或者 cp r centos5.3 2.linux 下新增postgresql 使用者 進入 postgresq...