程式猿之--C語言細節15(預先處理命令細節#error、運算子#和##、__FILE__、__LINE__),

來源:互聯網
上載者:User

程式猿之--C語言細節15(預先處理命令細節#error、運算子#和##、__FILE__、__LINE__),
主要內容:預先處理命令細節#error、運算子#和##、__FILE__、__LINE__

#include <stdio.h>  /* 包含這個標頭檔,並不是將其所有函數都連結進程式*/ /* ##運算子 */ #define MK_ID(n)  i##n    /* 表示將兩個記號串連 */ int MK_ID(1), MK_ID(2),MK_ID(3); /* 預先處理後變成int i1,i2,i3;*//* 定義多個type##_max函數,函數傳回型別和參數類型用define決定 * 如GENERIC_MAX(int)則成了int int_max(int x, int y){return}return x > y ? x : y;  */  #define GENERIC_MAX(type) \ type type##_max(type x, type y) \ {\ return x > y ? x : y; \}/* 宏定義中如果帶有參數則需要加圓括弧,如下: */#define THREE_PI (3*3.1415)#define TEST(x) ((x)*10)/* #error用法,error表示一個嚴重錯誤,大多數編譯器會立即停止編譯*/ #if INT_MAX > 100000#error int type is too small #endif/* #line指令用來改變給程式的行編號方式,通常編號是1,2,3,....*/ /* #運算子將一個宏的參數轉換為字串字面量*/#define PRINT_INT(x) printf(#x " = %d\n", x)  /* 效果為PRINT_INT(i/j)==>printf("i/j" " = %d\n", i/j)==>輸出i/j = 5*/ /* #單獨佔一行,是所謂的空指令,沒有任何作用,一些程式猿用來給條件編譯模組之間的間隔*/ #if INT_MAX > 1000##error int##endif /* 條件編譯*/#define DEBUG   /* 不需要給DEBUG一個值*/#if defined(DEBUG) #endifint main(int argc, char* argv[]){int i = 10, j = 2;PRINT_INT(i/j);printf("Compiled on %s at %d \n",__FILE__,__LINE__);  /* __FILE__表示當前檔案,__LINE__表示當前行,調試時用很好,特別是在嵌入式linux驅動 */ printf("%s || %s \n",__DATE__,__TIME__); /* 還有__DATE__日期,__TIME__時間*/printf("%d\n",__STDC__);   /* __STDC__查看編譯器是否結果標準C,接受則返回1*/ return 0;}

輸出:


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.