A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 为梦想挺身而出 于 2014-5-21 01:33 编辑

  1. #include <stdio.h>

  2. #define B 10

  3. int main()
  4. {
  5.     //1求反
  6. #ifndef B
  7.     printf("哈哈\n");
  8. #elif C
  9.     printf("呼呼\n");
  10. #else
  11.     printf("嘿嘿\n");
  12. #endif
  13.    
  14.   //2
  15. #ifdef c
  16.     printf("啾啾\n");
  17. #elif B
  18.     printf("咕咕\n");
  19.    
  20. #else
  21.     printf("嘎嘎\n")
  22. #endif
  23.    
  24.     return 0;
  25. }
复制代码



#ifdef就是正常的,是不是哪边写错了

点评

不要刷分  发表于 2014-4-24 11:26

9 个回复

倒序浏览
我的运行结果:





首先楼主没有定义宏C,#ifndef B 的意思是如果没有定义宏B 则编译它后面的代码,这里明显定义了宏B,
所以第一段条件编译代码会进入#else阶段,程序会输出  “嘿嘿”。


第二段条件编译由于没有定义C,会往下接着判断,判断到#elif B 这句满足条件,所以会编译它后面的代码。
程序会输出 “咕咕”  

希望对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报

#ifndef 就不会判断#elif的宏吗?
回复 使用道具 举报
为梦想挺身而出 发表于 2014-4-23 23:00
#ifndef 就不会判断#elif的宏吗?

#define B 10
int main()
{
#if !defined(B)
    printf("哈哈\n");
#elif !defined(A)
    printf("呼呼\n");
#else
    printf("嘿嘿\n");
#endif

return 0;
}

这里就是呼呼
#if !defined 和ifndef不是一样的吗?
回复 使用道具 举报
为梦想挺身而出 发表于 2014-4-23 23:00
#ifndef 就不会判断#elif的宏吗?

这里虽然是条件编译,但是判断方式跟if   else if    else是一样判断的,只是根据条件的不同而编译不同的代码罢了,我不知道这样说是否更加明了呢
回复 使用道具 举报
傘が咲く 发表于 2014-4-23 23:12
这里虽然是条件编译,但是判断方式跟if   else if    else是一样判断的,只是根据条件的不同而编译不同的 ...



#define B 10
int main()
{
#if !defined(B)
    printf("哈哈\n");
#elif !defined(A)
    printf("呼呼\n");
#else
    printf("嘿嘿\n");
#endif

return 0;
}
你没理解我的意思 我是说,这里输出呼呼 把#if !defined 换成#ifndef 值就会变成嘿嘿了,怎么用#ifndef又能输出呼呼呢
回复 使用道具 举报
条件编译,只有满足某个条件,代码才会参与编译,否则代码将不会参与编译。条件编译的定义格式:
#if 条件
……code……
#elif 条件
……code……
#else
……code……
#endif

在定义条件编译时,只要写了#if,就必须在后面写一个#endif.否则会引发代码不参与编译的严重后果。


条件编译的其他用法

#if defined (MAX)
……code……
#endif
其中的MAX是宏。当定义了宏MAX时条件成立,编译代码。没有定义宏MAX时,条件不成立,不编译代码。

#if !defined(MAX)
……code……
#endif
其中的MAX是宏。当没有定义宏MAX时条件成立,编译代码。定义了宏MAX时,条件不成立,不编译代码。


#ifdef MAX
……code……
#endif
其中的MAX是宏。当定义了宏MAX时条件成立,编译代码。没有定义宏MAX时,条件不成立,不编译代码。


#ifndef MAX
……code……
#endif
其中的MAX是宏。当没有定义宏MAX时条件成立,编译代码。定义了宏MAX时,条件不成立,不编译代码。

条件编译的格式是上面几种,你说的那个是上面几种交叉使用似乎是不行的。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
pray 高级黑马 2014-4-26 00:22:20
8#
去干吗啊~~~伤心啊~~~
回复 使用道具 举报
pray 高级黑马 2014-4-26 00:54:04
9#
去干吗啊~~~伤心啊~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马