C++多文件结构和编译预处理命令
2018-01-06 22:36
267 查看
<1>一般一个项目至少划分3个部分:类定义文件,类实现文件,类使用文件。
<2>外部变量:在源文件1中定义的变量,可以在源文件2通过关键字加以声明之后应用。
对外部变量的声明可以是定义性声明,也可以是引用性声明,定义性声明是指extern int i=2;声明同时定义,引用性声明指extern int i;只是对源文件1中的变量i进行引用。
<2>外部函数:TIP:通常情况下,对变量和函数的定义都放在源文件中,而对外部变量和外部函数的引用性声明则放在头文件中。
<3>将不希望被其他编译单元引用的函数和变量放在匿名的命名空间中。
<4>编译预处理
第一,#include<文件名>:按标准方式搜索,文件位于系统目录的include子目录下。
第二,#include"文件名":首先在当前目录搜索,如果没有,在再按标准方式搜索。
第三,#define AAA:表示AAA已经被定义过了,#undef的作用是删除由#define定义过的宏,使之不再起作用。
第四,条件编译语句:可以使得同一个源程序在不同的编译条件下产生不同的目标代码(可以用于调试代码)
(1)形式一:
常量表达式非零时编译本端程序
(2)形式二:
常量表达式非零是编译P1,为零是编译P2
(3)形式三:
(4)形式四:
标识符是否曾经定义过,且未经过undef删除
(5)形式五:
如果标识符未被定义过,则运行P1,否则P2
第五,defined操作符
若是表示符被#define定义过且未经#undef删除,则上式返回非零
第六,当需要头文件1,头文件2时,要满足,头文件1中的小的头文件head.h在头文件2中不出现。
如何解决呢?
<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
相关文章推荐
- C++编程入门系列之二十四(C++程序设计必知:多文件结构和编译预处理命令)
- C++程序设计必知:多文件结构和编译预处理命令
- C++多文件结构和编译预处理命令
- C++程序设计必知:多文件结构和编译预处理命令
- 鸡啄米:C++编程入门系列之二十四(C++程序设计必知:多文件结构和编译预处理命令)
- C++头文件与多文件结构,编译预处理
- 二十四、C++程序设计必知:多文件结构和编译预处理命令
- 多文件结构和编译预处理命令
- 多文件结构和编译预处理命令
- C++多文件结构及预处理命令
- C语言include预处理命令与多文件编译
- C++: 多文件结构和预编译命令
- class文件结构[1] 编译前预处理
- 三种预处理功能 : 宏定义 --文件包含 -- 条件编译 import include 常用c/c++库
- C++编译预处理:宏定义指令、文件包含指令和条件编译指令
- C++编译预处理:宏定义指令、文件包含指令和条件编译指令
- C++编译预处理:宏定义指令、文件包含指令和条件编译指令
- 预处理命令(宏定义,条件编译,头文件)
- c++基础(3.5)预处理:宏、文件包含、条件编译
- c语言编译01--预处理--头文件的结构和用途