头文件 & 预编译指令

2021-12-22  本文已影响0人  我阿郑

一、#include指令的原理

编译器在处理每个cpp之前,首先进行一个预处理:将所有的#include行替换成头文件的具体内容,形成一个中间文件,然后再对这个中间文件进行编译。

这个在编译之前的预处理过程 ,称为“预编译”过程。

注:如果头文件里还有#include,则反复替换,直到没有任何#include指令为止。

image.png

二、预处理指令

预处理指令不是语句,行尾不要加分号

// #define代入的是文本,而不是值
// 只要把文本原番不动地代入后,检查一下语法是否正确,程序是否合乎逻辑
#define PI 3.14  
#define  MAX(a,b)  a>b ? a : b

// 要定义一个值,通常外加一个小括号
#define  MUL  (1 + 2)

#define的取代办法

在程序中应该尽量少用这两种#define

取代的办法是:

(1) 定义变量或const常量

     const double PI = 3.14;

(2) 定义inline函数

     inline int max(int a, int b)
     {
         return  a>b ? a: b;
     }

三、头文件与源文件分离

class的分离式写法

class的成员函数的定义写在class之外,即class的大括号的外面

///////////  main.cpp ////////////
class Object
{
public:
   int x;
   void Test(); // (1) 成员函数的声明
};
void Object::Test() //(2) 成员函数写在外边,加上类名限定
{
}

这种写法:

分开为头文件和源文件

按照一贯的原则:类型定义写在头文件.h里,函数实现写在源文件.cpp

///////////  Object.h ////////////
class Object
{
public:
   int x;
   void Test();
};

///////////  Object.cpp ////////////

#include <stdio.h>
#include "Object.h"

void Object::Test() 
{
    printf("x is %d \n", x); // 仍然可以省略this->
}
上一篇下一篇

猜你喜欢

热点阅读