91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

防止頭文件多次引入

發布時間:2020-06-21 00:11:02 來源:網絡 閱讀:581 作者:xujiafan_2015 欄目:編程語言

1.頭文件被多次重復引用會造成的后果:

        頭文件多次重復引用:一個頭文件被多次在源文件中多次引用。

先來看一段代碼:

/*Test.h*/

#include <stdio.h>
int a = 10;
/*Test.c*/

#include "Test.h"
#include "Test.h"

int main()
{
    printf("d o o\n");
    return 0;
}

顯示結果:

防止頭文件多次引入

出現了錯誤,由于多次引入同一頭文件,導致變量重定義,這時,有些人就會說,誰會**到引入兩次頭文件,對哦,那么看下面這個例子:

/*Test.h*/

#include <stdio.h>

int a = 10;
/*Test.c*/

#include "Test.h"

int a = 20;

int main()
{
    printf("a = %d\n", a);
    return 0;
}

這個就很有可能寫出來了,當然還是先看一下結果:

防止頭文件多次引入

和上面那種情況一模一樣..


總結:

    當多次引用同一頭文件時,會有可能出現變量重定義,導致代碼在編譯時出錯。所以規范的代碼應該避免這種情況的發生。

這是在知乎關于這個問題的討論和大牛的一些觀點-------知乎大牛


2.怎樣避免發生這種錯誤

第一種方式:

#ifndef __TEST_H__
#define __TEST_H__

//your code

#endif

采用條件編譯的方式,當第一次引入TEST_H時,編譯器會檢測到TEST_H還沒有被定義,那么就會執行下面的內容;當再次引入,就會檢測到已經定義了TEST_H,那么此時就不會執行下面的內容,這種采用宏定義的處理,可以很有效的避免發生這種錯誤。

第二種方式:

#pragma once

//your code

這是一種由編譯器提供支持的方式,防止同一文件的二次編譯,這里的同一文件指的是物理文件(實實在在存在的文件)。

兩種方式的對比:

#ifndef的方式依賴于宏名字不能沖突,這不光可以保證同一個文件不會被包含多次,也能保證內容完全相同的兩個文件不會被不小心同時包含。當然,缺點就是如果不同頭文件的宏名不小心相同時,可能就會導致頭文件明明存在,編譯器卻硬說找不到聲明的狀況。


#pragma once則由編譯器提供保證:同一個文件不會被包含多次。注意這里所說的“同一個文件”是指物理上的一個文件,而不是指內容相同的兩個文件。帶來的好處是,你不必再費勁想個宏名了,當然也就不會出現宏名相同引發的奇怪問題。對應的缺點就是如果某個頭文件有多份拷貝,此時就不能保證他們不被重復包含。當然,相比宏名相同引發的“找不到聲明”的問題,重復包含更容易被發現并正。


方式一由語言支持所以移植性好,方式二 可以避免名字沖突。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乌珠穆沁旗| 三明市| 察雅县| 焦作市| 湟中县| 鲜城| 鹿泉市| 台北市| 乐安县| 紫金县| 普兰店市| 葵青区| 雷山县| 长丰县| 肃北| 安图县| 荔波县| 行唐县| 汤原县| 平昌县| 祥云县| 邢台市| 广平县| 富川| 沿河| 阿坝| 吴堡县| 六盘水市| 灌阳县| 浦城县| 辽中县| 若羌县| 嵩明县| 鄂伦春自治旗| 乌拉特中旗| 长治县| 天峻县| 宣汉县| 宜兰县| 海阳市| 夹江县|