august 发表于 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
这些到底是什么啊......完全没看懂

shawind 发表于 2007-8-17 16:52:55

都是预处理指示符,
我觉得可以理解为控制编译器编译行为的语言,会在编译时执行。

coolpay64 发表于 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過一般

某想這是最易明白的解說

Zelsazgh 发表于 2007-8-17 21:53:16

在GCC中可以用D参数...来指定相关的预处理命令值
gcc -d MAX...............就可以直接调用第一个MAX定义了....

august 发表于 2007-8-18 10:34:45

明白了,谢谢,没想到原来C语言我还这么多东西没接触过..............
页: [1]
查看完整版本: 问个程序