一.变量的命名约定
由于windows程序很长,编程人员在一段时间后自己可能忘记所定义变量的含义。为了帮助记忆和区分变量,微软创建了windows的命名约定,称为匈牙利表示法。匈牙利表示法提供了一组前缀字符,如下(红色表示常用的):
前缀 | 含义 |
a | 数组 |
b | 布尔值 |
by | 无符号字节 |
c | 字节 |
cb | 字节记数 |
rgb | rgb颜色的长整型 |
cx,xy | 计算x和y长度的短整形 |
dw | 无符号长整形 |
fn | 函数 |
h | 句柄 |
i | 整数 |
m_ | 成员变量 |
n | 短整形 |
np | 近指针 |
p | 指针 |
l | 长整形 |
lp | 长指针 |
s | 字符串 |
sz | 以零结束的字符串 |
tm | 正文大小 |
w | 无符号整形 |
x,y | 表示x或y坐标的无符号整形 |
二.头文件
1.包含头文件方式:
#include<iostream.h>
#include"myselfdefine.h"
2.<>和“”有什么区别呢?
他们的区别在于编译器搜索头文件的顺序不同:
<>表示从系统目录下开始搜索,再搜索PATH环境变量所列出的目录,不搜索程序的当前目录。
“”表示先从当前目录搜索,然后搜索系统目录,再是PATH环境变量列出的目录
3.头文件被重复包含的解决办法
如果一个头文件,被一个工程的很多类所包含,那么编译器会报错:头文件被重复定义。两种解决办法:
第一种:
使用#ifndef 和#define和#endif
#ifndef HAVEDDEFINE
#define HAVEDDEFINE
class animal
{
public:
animal();
~animal();
}
#endif
在类第一次包含此头文件,判断是否还没定义HAVEDDEFINE,如果没有返回为真,就往下执行,定义#define HAVEDDEFINE,然后执行到#endif结束;第二次包含此头文件,判断是否还没定义HAVEDDEFINE,因为已经定义了HAVEDDEFINE,条件判断返回为假,就直接跳到#endif结束,不执行中间的代码。
第二种:
使用#pragma once
#pragma once
class animal
{
public:
animal();
~animal();
}
编译器执行到pragma once会只包含一次
三.程序的编译链接过程
在编译时 :
1.由预处理器对预处理指令(#include,#define和#if)进行处理,结果是在内存中输出翻译单元(一种临时文件)
2.由编译器接受预处理的输出,将源代码转换成包含机器语言指令的三个目标文件(扩展名为obj的文件)
注意:在以上两个编译的过程中,头文件不参与编译
在链接时:
3.将目标文件和你所用到的c++类库文件(.lib)一起链接生成可执行程序exe
如下图: