吉林大学面向对象编程笔记(2)C++程序结构

132 阅读2分钟

C++程序结构

C++工程(项目)组成

image-20230624121356868.png

EG

image-20230624121409257.png

  1. 预编译过程(也称预处理, pre_compile):处理源代码中的带有#号的语句,生成编译程序可处理的文本文件

  2. 编译过程( compile ):对每个预处理后源程序,编译并生成相应的二进制目标文件(object文件)。此过程中,要求编译器能够识别每个标识符,知道其各自的类型、含义但不要求知道存放位置

  3. 链接过程:对在整个程序范围内,确定各标志符所代表的地址,如变量、函数入口,生成可执行文件。此过程中,要求编译器能够确定每个标识符所对应的含义和地址

    • C++的编译是以实现文件(cpp文件)为基本编译单位的;
    • 预编译、编译和链接过程,有时我们统称编译过程;
    • 各阶段均无错误,才能生成可执行文件;
    • 即使生成了可执行文件,不代表程序就正确;让编译过程通过,是相对简单的;真正困难的是调试逻辑错误

make工具

cc.exe myfile02.cpp –o myfile02.obj
  1. 先取得myfile02.obj文件的时间戳(最后修改时间),
  2. 与myfile02.cpp myfile01.h myfile02.h myfile88.h各文件的时间戳比较,
  3. 若某个文件(如myfile02.h)比myfile02.obj文件新,说明myfile02.h有新的修改,则重新执行这行命令;否则略过这行命令,以便加快编译速度。

入口函数(main函数)

  • C/C++普通可执行程序(exe)的起始函数

  • 返回值: int 或void , 缺省为int. (C++1z 要求int)

  • 参数部分:无 或 (int argc,char* argv[ ])

    int argc 总参数数量 包括执行文件的第一个参数(exe)

    char* argv[ ] 数组,具体参数

头文件

头文件扩展名

  1. 标准库与自定义头文件

    • 标准库:系统预定义的文件,其可执行代码通常存在于操作系统,或者随编译器一同发布。属于标准C++的一部分。

    • #include <a.h>和#include “a.h”

      • < > :在系统目录中查找相应的头文件
      • “” :先在本地(当前工程)的目录中查找相应的头文件;若找不到,再到系统目录中查找相应的头文件
    • #include 和#include<xx.h>前者是C++的风格大体上:#include 相当于

      namespace std {

      #include “xx.h”

      }

  2. include的顺序

  3. 前置声明

    告诉编译器,一个标识符所代表的类型、含义等, 但不必告知其具体位置

    class A;
    class B;
    void  func1st( A * pa );
    void  func2nd( B * );
    
  4. 使用头文件

  5. 包含警戒(include guard)包含警戒与#pragma once

    包含警戒与#pragma once等价

    #ifndef   DOGH
    #define  DOGH
    #include “headfile1.h”
    class  Bone;
    class  Dog 
    {
    public:
    void Eat(Bone * pBone);
    private:
    int  age;        
    };
    #endif
    
    #pragma once
    #include “headfile1.h”
    class  Bone;
    class  Dog 
    {
    public:
    void Eat(Bone * pBone);
    private:
    int  age;        
    };