幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2309|回复: 4

[通用编程] 问个程序

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-8-17 16:09:12 | 显示全部楼层 |阅读模式
#include<stdio.h>
#define MAX
#define MAXIMUM(x,y) (x>y)?x:y
#define MINIMUM(x,y) (x>y)?y:x
void main()
{
  int a=10,b=20;
  #ifdef MAX
    printf("\40:the larger one is %d\n",MAXIMUM(a,b));
  #else
    printf("\40:the lower one is %d\n",MINIMUM(a,b));
  #endif
  #ifndef MIN
    printf("\40:the lower one is %d\n",MINIMUM(a,b));
  #else
    printf("\40:the larger one is %d\n",MAXIMUM(a,b));
  #endif
  #undef MAX
  #ifdef MAX
    printf("\40:the larger one is %d\n",MAXIMUM(a,b));
  #else
    printf("\40:the lower one is %d\n",MINIMUM(a,b));
  #endif
  #define MIN
  #ifndef MIN
    printf("\40:the lower one is %d\n",MINIMUM(a,b));
  #else
    printf("\40:the larger one is %d\n",MAXIMUM(a,b));
  #endif
}
里面的 #ifdef MAX    #else    #endif
  #ifndef MIN     #endif
  #undef MAX
  #ifdef MAX    #endif
  #define MIN
  #ifndef MIN
[s:6][s:6]这些到底是什么啊......完全没看懂[s:8]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2007-8-17 16:52:55 | 显示全部楼层
都是预处理指示符,
我觉得可以理解为控制编译器编译行为的语言,会在编译时执行。
え~え~お!!!
回复 支持 反对

使用道具 举报

19

主题

842

帖子

1万

积分

⑧专业

絕望青年,一起增高吧

积分
13676
发表于 2007-8-17 19:00:34 | 显示全部楼层
解說一下吧,所有#以先的指令也是Pre-compile command
顧名思義便是翻譯源碼前對源碼下指令
define 解 用某一物事取代另一物
#define MINIMUM(x,y) (x>y)?y:x
那以下所有的MINIMUM(x,y),翻譯時會被(x>y)?y:x取代
這個也稱為巨集(Macro)的功能
如果#define 後只有一項,便代表宣告一個項目,而這個項目只會在編譯程序中使用
#ifdef XXX 到#endif中的代碼是當XXX曾被#define時便會被編譯
比如
#ifdef MAX
    printf("\\40:the larger one is %d\\n",MAXIMUM(a,b));
  #else
    printf("\\40:the lower one is %d\\n",MINIMUM(a,b));
  #endif
由於#define MAX在這之前出現過,所以Compiler會compile
    printf("\\40:the larger one is %d\\n",MAXIMUM(a,b));
#ifndef就是If Not DEFine
也就是不曾#define過的意思
#undef XXX就是把曾經#define過的代號清除,彷似從來也沒有#define過一般

某想這是最易明白的解說

為著彼岸,便要與之妥協 但為著彼岸,更不能與之妥協

回复 支持 反对

使用道具 举报

20

主题

197

帖子

2641

积分

⑥精研

积分
2641
QQ
发表于 2007-8-17 21:53:16 | 显示全部楼层
在GCC中可以用D参数...来指定相关的预处理命令值
gcc -d MAX...............就可以直接调用第一个MAX定义了....
签名要少于60,SO,i haven't upload my pic
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-8-18 10:34:45 | 显示全部楼层
[s:1] 明白了,谢谢,没想到原来C语言我还这么多东西没接触过.............. [s:5]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-4 07:43 , Processed in 0.019963 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表