預處理實現條件編譯

1.請寫出輸出結果?
		
#if MAC_IF
	printf("MAC_IF = 1\n");
#elif MAC_IF
    printf("MAC_IF = 2\n");
#else
	printf("MAC_IF not defined!");
#endif

答案: MAC_IF not defined!
分析:#if 和 #elif 的常量表達式中出現了未定義的宏,它就被整數常量0所替代.


 

2.請寫出輸出結果?

#ifndef MAC_IF
	printf("MAC_IF not defined!\n");
#   define MAC_IF  //定義一個空的宏
#endif

#ifdef MAC_IF
	printf("MAC_IF has defined!\n");
#endif

答案:MAC_IF not defined!
     MAC_IF has defined!
分析:#ifndef測試宏是否還沒有定義,如果是就進入它的代碼塊;
     #ifdef正好相反,它測試宏是否已經定義,如果是就進入它的代碼塊;

 

3.請寫出下面的輸出結果

#define MAX_STR 0

#if defined(MAX_STR)
	printf("MAX_STR is defined!\n");
#elif !defined(DEBUG) && defined(_cplusplus)
	printf("C++ DEBUG is OFF\n");
#endif

答案:MAX_STR is defined!
分析:1、只能在#if 和 #elif 表達式中使用defined操作符,此時它相當於#ifdef 和 #ifndef;
     2、如果宏已經被定義了,則defined表達式的值爲1,否則爲0;
     3、defined操作符比#ifdef 和 #ifndef更靈活,它可以創建複雜的表達式,如:
        #if !defined(DEBUG) && defined(_cplusplus)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章