Board logo

标题: 请教宏定义的问题 [打印本页]

作者: kingbox    时间: 2008-8-17 10:04     标题: 请教宏定义的问题

#define __dsPIC30F6014__
// #include<p30f6014>


#include <uart.h>
#include <adc12.h>
#include <p30F6014.h>

第一句什么意思?是吧__dsPIC30F6014__定义为空么?也就是出现__dsPIC30F6014__的地方都去掉?

#ifndef _STDIO_H_

#define _STDIO_H_

这几句又是什么意思?_STDIO_H_是指stdio.h么?为什么要这样写?作用难道是出现stdio.h的地方都去掉?可不可以把_STDIO_H_用stdio.h替代掉?


作者: kingbox    时间: 2008-8-17 10:05

还有,__dsPIC30F6014__为什么前后要加两个下划线?只加一个行不行?不加行不行?
作者: fayefayehoo    时间: 2008-8-17 10:25

调试的时候有用,比如

#ifndef __dsPIC30F6014__

test = 1;

#else

test = 2;

#endif

第二个问题其实跟第一个差不多,就是一个哨兵,在编译的时候其作用,预防重复定义。

[此贴子已经被作者于2008-8-17 10:27:02编辑过]


作者: kingbox    时间: 2008-8-17 10:34

#ifdef WINDOWS
#define MYTYPE long
#else
#define MYTYPE float
#endif


如果在Windows上编译程序,则可以在程序的开始加上
#define WINDOWS


这样则编译下面的命令行:
#define MYTYPE long


如果在这组条件编译命令之前曾出现以下命令行:
#define WINDOWS 0


则预编译后程序中的MYTYPE都用float代替。

以上是我在网上查到的,但有些不明白,为什么#define WINDOWS 0的时候会执行后面一段?也就是认为WINDOWS没有被定义?#define WINDOWS 和#define WINDOWS 0有什么区别?后面加个0和不加有什么含义?

[此贴子已经被作者于2008-8-17 10:36:27编辑过]


作者: fayefayehoo    时间: 2008-8-17 11:11

实际写了一小段测试了一下,#define WINDOWS 0执行的是上面那段程序。


作者: kingbox    时间: 2008-8-17 13:47

也就是说,只要有#define WINDOWS **,不管**是什么,或者是空的,也表示已经定义了?


作者: kingbox    时间: 2008-8-17 21:42

高手再来解答一下啊

[em04][em04]
作者: strongchen    时间: 2008-8-20 11:50

对,用了#define后,后面可以不接参数,就表示已经定义过了。
作者: kingbox    时间: 2008-8-20 12:01

谢谢




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0