1. 程式人生 > >C 頭文件、宏、編譯問題

C 頭文件、宏、編譯問題

fin 若有 使用 定義變量 不同的 出現 文件的 無需 文件包含

@2019-02-15

【小記】

> C 頭文件的防重復包含是針對同一個源文件而言

原因:

  #include 頭文件就是一段代碼的拷貝,頭文件中若有類型定義等,重復包含就會造成編譯錯誤,若無類型定義等不造成重復定義的,則無需防重復包含機制

防重包含機制:

  #pragma once

  #ifndef _MACRO_  #define _MACRO_  #endif

> 在頭文件中不要定義變量、函數等是為了解決被多個源文件包含時出現重復定義

> 宏具有隱蔽性、最新性

  在不同源文件中定義同名宏,不會出現任何問題

  在同一源文件中多次定義同名宏,則宏為最後一次定義的值

使用場景:

  公共頭文件中依據宏值或宏定義不同,而對應不同的執行語句,則在不同源文件中包含該公共頭文件,根據需要定義不同的宏使用相應的執行語句

  使用案例:rt-thread中文件 <rtdbg.h> ,詳見其開頭說明部分

> 同一源文件中多次定義同名變量無錯誤,但只允許初始化一次

> 不同源文件中不允許定義同名變量

C 頭文件、宏、編譯問題