define問題
#include "stdio.h"
#define exchange(a,b) { \ /*宏定义中允许包含两道衣裳命令的情形,此时必须在最右边加上"\"*/
int t;\
t=a;\
a=b;\
b=t;\
}
void main(void)
{
int x=10;
int y=20;
printf("x=%d; y=%d\n",x,y);
exchange(x,y);
printf("x=%d; y=%d\n",x,y);
}
網上看到這樣的一個例子,但爲什麼運行不了呢? 不太清楚c的宏是怎么回事,dmc下也是报错。
每次移植H文件为D模块的时候,宏总是让人头痛不已。 粘帖自网页很可能隐藏一些无聊的字符……看不到文本不表示一定就是空格或者Tab,在UE HEX下面就看到一串0xA1……不是0x20呢
另外其实开始是猜测\\和/*之间空格有错误,嗯,不可以有空格呢^^
每次移植H文件为D模块的时候,宏总是让人头痛不已。
不是很明白,没用过D,为什么宏这么麻烦??? 因为D中完全没有宏功能,要移植c中复杂的宏就只能借助模板之类的东西。
就比如说Windows中H文件吧
#define MAKEFOURCC(ch0, ch1, ch2, ch3) \\
((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \\
((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
这样就可以把MAKEFOURCC当成函数一样到处用了。编译器会在编译期计算出结果。
D中就得写成这样
template T_MAKEFOURCC(ubyte ch0, ubyte ch1, ubyte ch2, ubyte ch3) {
const T_MAKEFOURCC = cast(uint)ch0 | cast(uint)(ch1 << 8) | cast(uint)(ch2 << 16) | cast(uint)(ch3 << 24 );
}
得用上template才能在编译期算出结果。原来我是不想学什么范型编程的,结果一来二去,对模板倒明白了点。 这很明显是#define那行的\\位置放错了……把\\放在那行的最后。搞清楚\\的作用——escape掉换行符。 偶反而觉得会误导偶对C++的TEMPLATE的理解……
还是慎用啊………… 反正我又不怎么用c++的说,不用注意这个问题。
←其实是只会点c,不会c++ #include "stdio.h"
#define exchange(a,b) {\\
int t;\\
t=a;\\
a=b;\\
b=t;\\
}
void main(void)
{
int x=10;
int y=20;
printf("x=%d; y=%d\\n",x,y);
exchange(x,y);
printf("x=%d; y=%d\\n",x,y);
}
原來這樣。。。
页:
[1]