C++条件编译的小问题,非常感谢!!!
来源:百度知道 编辑:UC知道 时间:2024/05/30 08:04:16
我用VC++ 6.0自动生成了一个类,但是,我不明白该类的头文件的条件编译!
我的问题是:
1.编译一个.cpp是否必须只能编译一次?多次编译是否会报错?
2.帮我讲一下 下面头文件的条件编译的各行代码
3.谢谢!
// Merchandize.h: interface for the Merchandize class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MERCHANDIZE_H__8DFCE3D4_984C_43F3_9233_ACD9EFED095B__INCLUDED_)
#define AFX_MERCHANDIZE_H__8DFCE3D4_984C_43F3_9233_ACD9EFED095B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define MERCH_NAME_LENGTH 30
class Merchandize
{
public:
Merchandize();
virtual ~Merchandize();
private:
char name[30]; //商品名称
char serNum[15]; //商品编号
char type[10]; //商品型号
char spec[10]; //商品规格
char unit[6]; //计量单位
char proArea[10]; //商品产地
char sup[30]; //供货信息
char remark[30]; //注解
};
#endif // !defin
1.编译一个.cpp是否必须只能编译一次?多次编译是否会报错?
答:这应该是一个.h头文件吧,这里面定义了一个类,因为
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
的存在, 这个类只能编译一次。
这么做是为了节约编译时间,节省空间。
(如果不加这句,当这个类的头文件在多个地方被引用时,每引用一次就会编译一次。虽然不会出很大的问题,但是并没有什么好处。)
2.帮我讲一下 下面头文件的条件编译的各行代码
条件编译,即:
#if !defined(AFX_MERCHANDIZE_H__8DFCE3D4_984C_43F3_9233_ACD9EFED095B__INCLUDED_)
#define AFX_MERCHANDIZE_H__8DFCE3D4_984C_43F3_9233_ACD9EFED095B__INCLUDED_
...
...
...
#endif // !defined(AFX_MERCHANDIZE_H__8DFCE3D4_984C_43F3_9233_ACD9EFED095B__INCLUDED_)
这是机器自动产生的,所以有些啰嗦,如果我们手动写,完全可以写成这样:
#ifndef _MERCHANDIZE_H_
#define _MERCHANDIZE_H_
...
...
...
#endif
意思就是防止头文件被重复包含。
比如在一个文件 a.h中包含了Merchandize.h,
在b.h中也包含了Merchandize.h。
在另一个文件 c.cpp中要包含 a.h 和c.h,展开后,会发现,Merchandize.h被包含了两次 。如果没有
#ifndef _MERCHANDIZE_H_
#define _MERCHANDIZE_H_
...
...