#define用於定義宏,宏在源代碼展開時被處理。算法

#define 中使用參數編程

#define ADD(x,y) x+y 

用宏建立字符串函數

#define PSOR(X) printf("sasds "#X"  ")

int main()
{

PSOR(12);

return 0;
}

預處理粘合劑:##運算spa

#define XNAME(n)  x ## n
#define PRINT_INT(n) printf(" "x" #n " = %d\n",x ## n)

int main()
{
int XNAME(1) = 14;// int x1 = 14
PRINT_INT(1); // printf("x1 =%d\n",x1);

return 0;
}

變量宏...和_ _VA_ARGS_ _命令行

#define PR(...) printf(_ _ VR_ARGS_ _)
#define PR(X,...) printf("Message " #X " : " _ _VA_ARGS_ _ )

  #include 指令用於包含其餘文件翻譯

#include<stdio.h>  在系統目錄中尋找該文件code

#inclde"mystuff.h" 在當前目錄中尋找該文件blog

 

#undef 用於取消已定義的#define指令內存

#define LIMIT 400

#undef LIMIT

 

條件編譯開發

#ifdef,#else,#endi,#ifndef

#if,#elif

#if指令很像C語言中的if,#if後面跟整形常量表達式,若是表達式爲非零,則表達式爲真。

#if SYS == 1
    #include "ibmpc.h"
#elif SYS == 2
    #include "mac.h"
#else
    #include "general.h"
#endif

 

預約義宏

含義
_ _DATE_ _ 預處理日期("Mmm dd yyyy形式的字符串字面量",如Nov 23 2013)
_ _FILE_ _ 表示當前源代碼文件名的字符串字面量
_ _LINE_ _ 表示當前源代碼文件中行號的整型變量
_ _STDC_ _ 設置爲1事,表示實現遵循C標準
_ _STDC_HOSTED_ _ 本機環境設置爲1,不然設置爲0
_ _STDC_VERSION_ _ 支持99標準,設置爲199901L,支持11標準,設置爲201112L
_ _TIME_ _ 翻譯代碼的時間,格式爲"hh:mm:ss"

C99標準提供了一個名爲_ _func_ _的預約義標識符,它展開爲一個表明函數名的字符串

int main()
{

printf("cur func is %s",_ _func_ _); //輸出main
return 0;
}

#line 和 #error

#line 指令重置_ _LINE_ _和_ _FILE_ _宏報告的行號和文件名。

#line 100 //把當前行號重置爲100
#line 10 "cool.c" //行號重置爲100 文件名重置爲cool.c

#error能夠讓預處理器發出一條錯誤信息,若是可能的話,編譯過程應該中斷。

#if _ _STD_VERSION_ _  != 201112L

#error Not c11

#endif

 

#pragma

在現代編譯器中,能夠經過命令行參數修改編譯器一些設置,#pragma把編譯器指令放入源代碼中,例如,在開發C99時,標準稱爲C9X,能夠使用下面這個指令讓編譯器支持C9X。

#pragma c9x on

通常而言,編譯器都有本身的編譯指示集,例如,編譯指示可能用於控制分配給自動變量的內存量,或者設置錯誤檢查的嚴格程度,或者啓動非標準語言特性等。

 

泛型選擇

泛型編程是指那些沒有特定類型,可是一旦指定一種類型,就能夠轉換成指定類型的代碼。例如,C++中的模版中能夠建立泛型算法,而後編譯器自動根據指定的類型自動使用實列化代碼。C11新增了泛型選擇表達式。

#define MYTYPE(X) _Generic((X),int :"int",default:"other")
_Generic 是新增的關鍵字。
相關文章
相關標籤/搜索