一.變量的命名約定
由於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
如下圖: