C 標頭檔案 巨集 編譯問題

2022-06-30 11:57:08 字數 540 閱讀 3130

@2019-02-15

【小記】

> c 標頭檔案的防重複包含是針對同乙個原始檔而言

原因:#include 標頭檔案就是一段**的拷貝,標頭檔案中若有型別定義等,重複包含就會造成編譯錯誤,若無型別定義等不造成重複定義的,則無需防重複包含機制

防重包含機制:

#pragma once

#ifndef _macro_  #define _macro_  #endif

> 在標頭檔案中不要定義變數、函式等是為了解決被多個原始檔包含時出現重複定義

> 巨集具有隱蔽性、最新性

在不同原始檔中定義同名巨集,不會出現任何問題

在同一原始檔中多次定義同名巨集,則巨集為最後一次定義的值

使用場景:

公共標頭檔案中依據巨集值或巨集定義不同,而對應不同的執行語句,則在不同原始檔中包含該公共標頭檔案,根據需要定義不同的巨集使用相應的執行語句

使用案例:rt-thread中檔案 ,詳見其開頭說明部分

> 同一原始檔中多次定義同名變數無錯誤,但只允許初始化一次

> 不同原始檔中不允許定義同名變數

c 中預編譯標頭檔案問題

fatal error c1010 unexpected end of file while looking for precompiled header directive 今天程式設計出現了莫名奇妙的錯誤,怎麼回事呢?沒有寫錯啊?這就是預編譯帶來的問題,經常莫名奇妙出現編譯錯誤,給程式設計帶來了...

預編譯標頭檔案問題

預編譯標頭檔案 今天在改乙個很大的程式,慢慢看,慢慢改。突然發現乙個.c檔案,裡面什麼也沒有,就幾個標頭檔案,我一看,我靠,這不是把簡單的問題搞複雜了嗎,隨手刪掉那個c檔案。結果不能編譯了,我靠 fatal error c1083 cannot open precompiled header fil...

C 預編譯標頭檔案

許多初學 vc 的朋友也許都為那麼乙個問題困擾過 為什麼所有的 cpp 都必須 include stdafx.h 也許請教了別的高手之後,他們會告訴你,這是預編譯頭,必須包含。可是,這到底是為什麼呢?預編譯頭有什麼用呢?這得從頭檔案的編譯原理講起。其實標頭檔案並不神秘,它的全部作用,就是把自己的所有...