您的位置:首页 > 编程语言 > C语言/C++

C++多文件结构和编译预处理命令

2018-01-06 22:36 267 查看
<1>一般一个项目至少划分3个部分:类定义文件,类实现文件,类使用文件。

<2>外部变量:在源文件1中定义的变量,可以在源文件2通过关键字加以声明之后应用。

//源文件1
#include<iostream>
using namespace std;
int i=1;
int main()
{
i++;
return 0;
}
//源文件2
#include<iostream>
using namespace std;
extern int i;


对外部变量的声明可以是定义性声明,也可以是引用性声明,定义性声明是指extern int i=2;声明同时定义,引用性声明指extern int i;只是对源文件1中的变量i进行引用。

<2>外部函数:TIP:通常情况下,对变量和函数的定义都放在源文件中,而对外部变量和外部函数的引用性声明则放在头文件中。

<3>将不希望被其他编译单元引用的函数和变量放在匿名的命名空间中。

<4>编译预处理

第一,#include<文件名>:按标准方式搜索,文件位于系统目录的include子目录下。

第二,#include"文件名":首先在当前目录搜索,如果没有,在再按标准方式搜索。

第三,#define AAA:表示AAA已经被定义过了,#undef的作用是删除由#define定义过的宏,使之不再起作用。

第四,条件编译语句:可以使得同一个源程序在不同的编译条件下产生不同的目标代码(可以用于调试代码)

(1)形式一:

#if 常量表达式
程序段
#endif


常量表达式非零时编译本端程序

(2)形式二:

#if 常量表达式
P1...
#else
P2...
#endif


常量表达式非零是编译P1,为零是编译P2

(3)形式三:

#if 常量表达式1
P1...
#elif 常量表达式2
P2...
...
...
#elif 常量表达式n
Pn...
#else
P(n+1)...
#endif


(4)形式四:

#ifdef 标识符
P1...
#else
P2...
#endif


标识符是否曾经定义过,且未经过undef删除

(5)形式五:

#ifndef 标识符
P1...
#else
P2...
#endif


如果标识符未被定义过,则运行P1,否则P2

第五,defined操作符

用法:defined(标识符)


若是表示符被#define定义过且未经#undef删除,则上式返回非零

第六,当需要头文件1,头文件2时,要满足,头文件1中的小的头文件head.h在头文件2中不出现。

//main.cpp
#include"file1.h"
#include"file2.h"
int main()
{

}
//file1.h
#include"head.h"
P...
//file2.h
#include"head.h"
P...
//head.h
class Fun
{
P...
};


如何解决呢?

//head.h
#ifndef HEAD_H
#define HEAD_H
class Fun
{
P...
};
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息