预处理实现条件编译

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)


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