问个程序
#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
这些到底是什么啊......完全没看懂 都是预处理指示符,
我觉得可以理解为控制编译器编译行为的语言,会在编译时执行。 解說一下吧,所有#以先的指令也是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過一般
某想這是最易明白的解說 在GCC中可以用D参数...来指定相关的预处理命令值
gcc -d MAX...............就可以直接调用第一个MAX定义了.... 明白了,谢谢,没想到原来C语言我还这么多东西没接触过..............
页:
[1]