C語言 define 防止頭文件重復包含 - C語言零基礎入門教程


目錄

零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門

一.頭文件重復包含編譯器報錯

1.簡單的理解頭文件重復包

假如頭文件里有一行

int a=1;

包含兩次就變成了

int a=1;
int a=1;

於是變量重復定義,編譯器就會報錯,函數同理;

2.老流氓的理解頭文件重復包

你用過的套套肯定不會翻過來再用一遍;

二.通過宏定義解決頭文件重復包含

1.通過 #ifndef / #define 解決頭文件重復包含

#ifndef __XXX_H__
#define __XXX_H__

int a=1;

#endif

上面的偽代碼如下:

如果(沒有定義宏__XXX_H__)
{
    那么直接定義宏__XXX_H__
    定義變量a 並且賦值為 1
}
結束程序
  • 假如第一次包含時,由於沒有定義宏 __XXX_H,所以做了兩件事,定義宏 __XXX_H,然后定義 int a = 1;
  • 假如第二次包含時,由於已經定義宏 __XXX_H__,所以啥都不做;
  • 假如第 N 次包含時,由於已經定義宏 __XXX_H__,所以啥都不做;
  • 整個過程,無論頭文件被包含多少次,變量 a 只被定義一次,不會有重復包含重復定義的問題存在!

2.通過 #pragma once 解決頭文件重復包含

pragmaonce 是上述方式的簡寫,好處是再也不會有兩個頭文件因為使用了同樣的 __XXX_H__ 而被忽略了

#pragmaonce

 ... ... // 聲明、定義語句

三.通過插件 Visual Assist 設置快捷鍵解決文件重復包含

雖然上面兩種方式都能解決 C/C++ 頭文件重復包含沖突問題,但是還有一種更快捷的方法,直接通過 Visual Assist 設置快捷鍵完成,操作步驟如下:

1.安裝插件 Visual Assist

詳細的安裝流程請參考:安裝 Visual Studio 插件 Visual Assist

2.打開 VS,找到 VAssistX 選項

選擇頂部菜單 VAssistX -> Code Generation and Refactoring -> Edit Refactoring Snippets

3.設置模板內容

選擇 Type –> All by shortcut,新建一個快捷方式:** //t ** (快捷鍵:僅供參考,怎么順手怎么來)

頭文件模板內容如下:

#ifndef __$FILE_BASE_UPPER$_H__ //表示根據文件名字定義宏
#define __$FILE_BASE_UPPER$_H__
$end$
#endif //__$FILE_BASE_UPPER$_H__

4.點擊 OK,設置完成

5.快捷鍵測試

打開 vs,創建任意工程,添加頭文件,使用快捷鍵 //t,例如,我項目添加了一個 test.h 文件,然后使用快捷鍵 //t,如下:

#ifndef __TEST_H__
#define __TEST_H__

#endif  //__TEST_H__

推薦使用方法三,因為 Visual Assist 設置快捷鍵操作起來更方便快捷, Visual Assist 插件不僅能解決頭文件重復包含問題,還能通過快捷鍵設置文件版權信息和作者信息,參考文章:Visual Studio 設置文件版權信息

四.猜你喜歡

  1. C 語言 數組下標越界和內存溢出區別
  2. C 語言 指針聲明和定義
  3. C 語言 指針 p++ / p–
  4. C 語言 p++/§++/_(p++)/_p++
  5. C 語言 使用指針遍歷數組
  6. C 語言 指針和數組區別
  7. C 語言 指針數組和數組指針區別
  8. C 語言 空指針 NULL
  9. C 語言 void 指針
  10. C 語言 野指針
  11. C 語言 函數值傳遞和址傳遞
  12. C 語言 函數缺省參數
  13. C 語言 函數不定長參數
  14. C 語言 函數指針
  15. C 語言 指針函數
  16. C 語言 回調函數 callback
  17. C 語言 typedef
  18. C 語言 define 定義常量
  19. C 語言 define 防止頭文件重復包含

未經允許不得轉載:猿說編程 » C 語言 define 防止頭文件重復包含

本文由博客 - 猿說編程 猿說編程 發布!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM