C++程序结构
C++工程(项目)组成
EG
-
预编译过程(也称预处理, pre_compile):处理源代码中的带有#号的语句,生成编译程序可处理的文本文件
-
编译过程( compile ):对每个预处理后源程序,编译并生成相应的二进制目标文件(object文件)。此过程中,要求编译器能够识别每个标识符,知道其各自的类型、含义,但不要求知道存放位置
-
链接过程:对在整个程序范围内,确定各标志符所代表的地址,如变量、函数入口,生成可执行文件。此过程中,要求编译器能够确定每个标识符所对应的含义和地址
- C++的编译是以实现文件(cpp文件)为基本编译单位的;
- 预编译、编译和链接过程,有时我们统称编译过程;
- 各阶段均无错误,才能生成可执行文件;
- 即使生成了可执行文件,不代表程序就正确;让编译过程通过,是相对简单的;真正困难的是调试逻辑错误
make工具
cc.exe myfile02.cpp –o myfile02.obj
- 先取得myfile02.obj文件的时间戳(最后修改时间),
- 与myfile02.cpp myfile01.h myfile02.h myfile88.h各文件的时间戳比较,
- 若某个文件(如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[ ] 数组,具体参数
头文件
头文件扩展名
-
标准库与自定义头文件
-
标准库:系统预定义的文件,其可执行代码通常存在于操作系统,或者随编译器一同发布。属于标准C++的一部分。
-
#include <a.h>和#include “a.h”
- < > :在系统目录中查找相应的头文件
- “” :先在本地(当前工程)的目录中查找相应的头文件;若找不到,再到系统目录中查找相应的头文件
-
#include 和#include<xx.h>前者是C++的风格大体上:#include 相当于
namespace std {#include “xx.h”}
-
-
include的顺序
-
前置声明
告诉编译器,一个标识符所代表的类型、含义等, 但不必告知其具体位置
class A; class B; void func1st( A * pa ); void func2nd( B * ); -
使用头文件
-
包含警戒(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; };