c++基礎11:變量的命名約定 頭文件的問題 程序的預處理編譯鏈接過程

一.變量的命名約定

由於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

 如下圖:

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章