關於標准C語言的預定義宏


 

 

標准C語言預處理要求定義某些對象宏,每個預定義宏的名稱一兩個下划線字符開頭和結尾,這些預定義宏不能被取消定義(#undef)或由編程人員重新定義。下面預定義宏表,被我抄了下來。
__LINE__  當前程序行的行號,表示為十進制整型常量
__FILE__  當前源文件名,表示字符串型常量
__DATE__轉換的日歷日期,表示為Mmm dd yyyy 形式的字符串常量,Mmm是由asctime產生的。
__TIME__ 轉換的時間,表示"hh:mm:ss"形式的字符串型常量,是有asctime產生的。(asctime貌似是指的一個函數)
__STDC__ 編輯器為ISO兼容實現時位十進制整型常量
__STDC_VERSION__ 如何實現復合C89整部1,則這個宏的值為19940SL;如果實現符合C99,則這個宏的值為199901L;否則數值是未定義
__STDC_EOBTED__ (C99)實現為宿主實現時為1,實現為獨立實現為0
__STDC_IEC_559__ (C99)浮點數實現復合IBC 60559標准時定義為1,否者數值是未定義
__STDC_IEC_559_COMPLEX__ (C99)復數運算實現復合IBC 60559標准時定義為1,否者數值是未定義
__STDC_ISO_10646__ (C99)定義為長整型常量,yyyymmL表示wchar_t值復合ISO 10646標准及其指定年月的修訂補充,否則數值未定義

實現還經常定義其他宏用於傳遞環境信息,如進行程序編譯工作的計算機類型。具體定義哪些宏值是由實現決定的,但是UNIX實現習慣上預定義unix。與內置宏不同的是,這些宏可以取消定義。標准C語言要求特定實現的宏名一下划線開頭,加上大寫字母或另一個下划線(unix宏不符合這個要求)。

實際運用,例:預定義宏可以在魔種錯誤消息中使用:
if(n|=m)fprintf(stderr,"Internal error;line %d,file 5s\n",__LINE__,__FILE__);

其他實現定義的宏可以分隔主機或特定目標代碼。例如:Microsoft Visual C++定義__WIN32為1:
#ifdef __WIN32
      /*Code for Win32 environment*/
#endif

__STDC__與__STDC_VERSION__宏可以編寫與標准C語言和非標准C實現敬愛內容的程序:
#ifdef __STDC__
     /*Some version of Standard C*/
#if defined(__STDC__VERSION__)&&__STDC_VERSION__>=199901L
     /* C99 */
#elif defined(__STDC_VERSION__)&&__STDC_VERSION__>=199409L
     /*C89 and Amendment 1 */
#else
     /* C89 but not Amendment 1*/
#endif
#else /* __STDC__not defined */
    /*Not Standard C*/
endif

 

 

 

 

 

 

 

 

 

 

 

reference:http://blog.csdn.net/hrbeuwhw/article/details/7484432


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM