美文网首页
头文件 & 预编译指令

头文件 & 预编译指令

作者: 我阿郑 | 来源:发表于2021-12-22 11:40 被阅读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) 成员函数写在外边,加上类名限定
    {
    }
    

    这种写法:

    • 成员变量:还是写在类里面
    • 成员函数:在类里保留其函数声明,而函数的定义写在类体之外。
    • 写在外面的时候,要加上类名限定(Object::)
      其中,::可以理解为是表示范围的符号

    分开为头文件和源文件

    按照一贯的原则:类型定义写在头文件.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->
    }
    

    相关文章

      网友评论

          本文标题:头文件 & 预编译指令

          本文链接:https://www.haomeiwen.com/subject/goqxqrtx.html