返回狼盟编程首页
编程搜索 [狼盟旧档]
论坛统计


请输入搜索关键字:
├─◆ 狼盟首页 > 查看贴子 > 详细信息

楼主

请教C++的一个基础知识,关于#ifndef的。


初学C++,看了一些基础教程;



但对于有一些基本的东西还是不太了解,所以想请前辈们指点指点。



这个疑问是关于define的。



我知道在头文件的开头用#ifndef  语句可以起到避免头文件被重复引用的可能。



这也是C++高质量编程里面提到的必须要做的事情。



但是,我不太明白#ifndef的语法是怎么样的。



根据一些代码,我有自己的理解:

1.#ifndef 后面跟的文件名,是否必须为大写,是否要将.替换为_

2.紧跟着#ifndef后面要加#define 并且文件名也要用大写,并且将.替换为_

3.#ifndef 在头文件后面必须要加#endif.



不知是否正确?



找了一些资料没找到对#ifndef的介绍,希望在此得到大家的帮助!!





















just4zzfer [ 1 楼 ]
2005-09-28 11:19:00
头文件名跟大小写有关系吗?理解基本上正确 

onasp [ 2 楼 ]
2005-09-28 11:21:00
#ifndef 的意思是说 "如果没定义"  后面的你随便写,只要在程序中不重名就行
#define 的意思是说 "定义"
#endif 用来结束 #ifndef

这个和
if then
执行....
else
执行....
end if
表达的意思一样

在你的头文件有一些东西在主程序开始前要定义,但是只能定义一次

编译预处理 就可以 避免 因为重复包含头文件而造成的 重复定义
 

qq590240 [ 3 楼 ]
2005-09-28 11:31:00
// MyDiy.h

#ifndef MYDIY   如果MYDIY没有被定义
#define MYDIY   定义MYDIY
...
...
#endif
//--------------------------------------------------------------------------

// a.cpp
#define "MyDiy.h"
//--------------------------------------------------------------------------

// b.cpp
#define "MyDiy.h"
//--------------------------------------------------------------------------

MyDiy.h在a.cpp和b.cpp只会被定义一次 

pazll [ 4 楼 ]
2005-09-28 13:55:00
还有一个问题就是:
我在MyDiy.h这个头文件里面,是不是必须这样写
#ifndef MYDIY   如果MYDIY没有被定义
#define MYDIY   定义MYDIY

必须写MYDIY吗?

我写别的可以吗?
#ifndef anyString
#define anyString 

wangyunzhou [ 5 楼 ]
2005-09-28 15:32:00
我看看 

qq590240 [ 6 楼 ]
2005-09-28 16:19:00
to 4楼:

还有一个问题就是:
我在MyDiy.h这个头文件里面,是不是必须这样写
#ifndef MYDIY   如果MYDIY没有被定义
#define MYDIY   定义MYDIY

必须写MYDIY吗?

我写别的可以吗?
#ifndef anyString
#define anyString

------------------------------------------------------------------------

用MYDIY和anyString效果是一样的..不过最好遵循宏命名规范.以勉宏名和变量名冲突.也有利于区分宏和变量 

fang1984 [ 7 楼 ]
2005-09-28 19:10:00
#ifdef或#ifndef后面跟的是自定义的一个唯一的标识符,如果它已经被定义过,则头文件将不再被包含。
例:
#ifndef MYHEAD_H
#define MYHEAD_H
#include "myhead.h"
#endif

如果该标识符未被定义过,则编译#if和#endif之间的程序段;如果它已经被定义过,则跳过#if和#endif之间的程序段编译#endif后的内容。