程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 程序猿之--C語言細節15(預處理命令細節#error、運算符#和##、__FILE__、__LINE__)

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

編輯:關於C語言

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


主要內容:預處理命令細節#error、運算符#和##、__FILE__、__LINE__

#include   /* 包含這個頭文件,並不是將其所有函數都鏈接進程序*/ 

/* ##運算符 */ 
#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) 
#endif
int 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;
}

輸出:


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved