詞匯目錄
- 前言
- 一、宣告,定義,初始化,賦值之間的區別?
- 使用場景
- 為啥不能在頭檔案中定義變數?
- 1.helloworld.h(頭檔案)
- 2.helloworld.cpp(執行檔案)
- 二、預編譯,編譯,匯編,鏈接之間的區別?
- 1.如果看到這些流程的操作?
前言
提示:經常聽不懂他們講述的教程,其實是因為你沒有聽懂這里面詞匯的區別:
一、宣告,定義,初始化,賦值之間的區別?
在日常的教程中常說一些詞匯,但是沒有解釋他的意思,今天清晰解釋他們各自的意思
| 詞匯 | 區別 |
|---|---|
| 宣告 | 宣告說明了變數的名字和型別,但并不分配存盤空間, |
| 定義 | 定義也說明了變數的名字和型別,而且還為它分配了存盤空間,不填充初始值 |
| 初始化 | 定義也說明了變數的名字和型別,而且還為它分配了存盤空間,并填充初始值 |
| 賦值 | 對于已經定義的值初始化的值進行再次賦予更改的程序,只對于已經分配記憶體的變數,可以多次進行 |
注意:宣告可以執行多次,但是定義只能執行一次,就是初始化只能執行一次,賦值也可以執行多次
使用場景
在我們使用C++編譯器進行開發程式時,編譯器會將一個個對應的頭檔案和執行檔案通過編譯成為一個個OBJ檔案,然后在通過聯結器link成我們熟悉的exe檔案,最后我們在打開exe檔案執行程式,
而在這個程序中我們就可以解釋為啥要用這四個詞匯(說明一下:C++支持分離式編譯,把宣告和定義區分開來,一些其他語言不做嚴格磁區)
| 詞匯 | 區別 |
|---|---|
| 宣告 | 在撰寫程式的程序中在頭檔案進行變數的具體型別書寫,但不對其進行=等操作,但可能編譯器自己也有對其進行=0初始化操作,純粹的宣告無定義只需要在變數前加入extern進行修飾 |
| 定義 | 在宣告的時候,系統也為他分配了存盤空間,但是沒有在空間中添加值 |
| 初始化 | 一般在撰寫程式時,因為初始化=定義+初始化值,所以都是直接在CPP檔案中構建函式里面初始化使用的 |
| 賦值 | 在構建函式中使用完后通過其他函式呼叫或者自己更改進行多次更換變數記憶體中值的操作 |
為啥不能在頭檔案中定義變數?
可以在頭檔案中去定義變數,但是因為很多的CPP檔案中都會去包括頭檔案,這個時候就會發生一件事情:這個變數在很多CPP檔案中都存在一個副本,在我們連接生成exe的階段,就會發現有多個相同變數名的變數,會報錯,更不能在頭檔案中進行初始化,原因一樣,所以一般拿來進行變數宣告,函式宣告,結構體宣告,宏定義等,
1.helloworld.h(頭檔案)
代碼如下(示例):
#pragma once
#include <windows.h>
#include <iostream>
using namespace std;
/**-------只是在頭檔案中int就是宣告-----*/
int s;
/**-------extern int 單純的宣告-沒有定義,定義就在cpp中取一樣的名字進行定義,如int ss=1;*/
extern int ss;
/**-------在頭檔案中進行宣告定義初始化,可以這樣做,壞處就是每個人包括這個頭檔案都會給他創建記憶體空間到時報錯-----*/
int sss = 1;
/**--------當extern被賦予初始值后其實他的作用和上面的sss已經是一樣的了,只是寫法不同而已,也不建議*/
extern int ssss = 1;
class MyClass
{
public:
MyClass();
~MyClass();
private:
};
2.helloworld.cpp(執行檔案)
代碼如下(示例):
#include "helloworld.h"
//包括頭檔案進行定義和初始化;
MyClass::MyClass()
{
/**----給int s進行定義和初始值-----**/
s = 1;
/**----給extern int ss進行定義和初始化---*/
int ss = 1;
}
MyClass::~MyClass()
{
}
二、預編譯,編譯,匯編,鏈接之間的區別?
| 詞匯 | 區別 |
|---|---|
| 預編譯 | 展開頭檔案/宏替換/去掉注釋/條件編譯,就是對#符號命令的決議 (.i) |
| 編譯 | 檢查語法,生成匯編 (.s) |
| 匯編 | 匯編代碼轉換機器碼 就(.obj) |
| 鏈接 | 鏈接到一起生成可執行程式(.exe) |
1.如果看到這些流程的操作?
其中編譯可以通過debug模式通過斷點的方式滑鼠右鍵進行反匯編看到內部的匯編代碼,但是這些正常不涉及到底層開發的程式員其實用不到


而匯編轉機器碼的操作你可以通過在規定好自己的中間目錄,然后編譯后看到對應的檔案:
專案-屬性-中間目錄-進行設定


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/303994.html
標籤:python
下一篇:整型資料在記憶體中的存盤
