吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言中的頭文件能不能重復(fù)包含

學(xué)益得智能硬件 ? 來源:學(xué)益得智能硬件 ? 2024-11-26 17:19 ? 次閱讀

C語言中的頭文件能不能重復(fù)包含?

比如代碼寫成這樣,stdio.h 連續(xù)包含了兩次。

#include 
#include 

int main()
{
    printf("helloworld
");
    return 0;
}

我們先來編譯看下,好像沒有任何問題。

root@Turbo:~# gcc test.c -o test 
root@Turbo:~#

同一個(gè)頭文件,隨便包含多少次,都不會(huì)有問題,主要是這兩行代碼起了作用。

#ifndef _STDIO_H
#define _STDIO_H    1

寫頭文件的時(shí)候,習(xí)慣上都會(huì)加上兩個(gè)預(yù)處理指令,ifndef 和 define。

就以這個(gè) test.h 為例:

#ifndefTEST_H
#define TEST_H

struct Test
{
    int a;
};

#endif

在 test.h 里面聲明了一個(gè)結(jié)構(gòu)體,然后在源文件中包含了兩次。

頭文件往往在編譯的第一步,預(yù)處理的時(shí)候展開。

第一次展開 test.h 的時(shí)候,會(huì)遇到預(yù)處理指令 ifndef:

#ifndef TEST_H

翻譯過來就是如果沒有定義這個(gè)宏。

很顯然,這個(gè)宏確實(shí)沒有定義過,于是判斷成立。

繼續(xù)往下走,遇到 define:

#define TEST_H

意思就是把這個(gè)宏定義一下。

然后就是把 test.h 里面的內(nèi)容搬到源文件中,這就是所謂的展開。

第二次包含 test.h 的時(shí)候,重復(fù)上面的操作。

先是遇到 ifndef,很顯然,這個(gè)宏剛才定義過,于是這條預(yù)處理指令不成立,下面的所有代碼都會(huì)跳過。

這樣就清楚了,雖然我們?cè)谠创a里面包含了 test.h,但是因?yàn)榕袛嗖怀闪?,并沒有真正的包含進(jìn)去。

相同的頭文件在一個(gè)源碼文件中可以重復(fù)包含,因?yàn)轭A(yù)處理指令的存在,所以并不會(huì)出問題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137702
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4825

    瀏覽量

    69039

原文標(biāo)題:重復(fù)包含頭文件有什么影響

文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C6748的McBSP接口能不能讀ad1271的轉(zhuǎn)化數(shù)據(jù)?

    AD1271可以工作在兩種模式,一種是SPI;另一種是Frame Sync,我如果用C6748的McBSP接口能不能讀ad1271的轉(zhuǎn)化數(shù)據(jù)?
    發(fā)表于 01-01 07:22

    C語言中申請(qǐng)的堆內(nèi)存能不能自動(dòng)釋放

    C語言中申請(qǐng)的堆內(nèi)存能不能自動(dòng)釋放?每次都要手動(dòng) free 太麻煩,也容易忘記。 學(xué)過 C++ 的同學(xué),應(yīng)該首先能想到智能指針。 但是這是C
    的頭像 發(fā)表于 11-27 09:33 ?168次閱讀

    使用C語言實(shí)現(xiàn)函數(shù)模板

      用C語言能不能實(shí)現(xiàn)一個(gè)通用的函數(shù),既能完成整數(shù)的相加,又能完成浮點(diǎn)數(shù)的相加?
    的頭像 發(fā)表于 11-09 11:38 ?476次閱讀

    C語言中的socket編程基礎(chǔ)

    Socket編程簡介 Socket是一種通信機(jī)制,允許程序之間進(jìn)行通信。在C語言中,socket編程是網(wǎng)絡(luò)編程的基礎(chǔ)。通過使用socket,程序可以發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)不同計(jì)算機(jī)之間的通信
    的頭像 發(fā)表于 11-01 16:51 ?464次閱讀

    一體成型電感外殼破損還能不能

    電子發(fā)燒友網(wǎng)站提供《一體成型電感外殼破損還能不能用.docx》資料免費(fèi)下載
    發(fā)表于 10-31 10:57 ?0次下載

    TiNa里能不能加載HCNR的模型啊?

    我在用TI的運(yùn)放配合HCNR201做一個(gè)隔離方案,想仿真一下,用的是Multisim,但是Multisim里的運(yùn)放沒有輸出幅值對(duì)電源的限制,從TI網(wǎng)站上下載了一個(gè)擴(kuò)展名是MOD的模型,在Multisim里無法加載,只能用.cir的文件。想問一下怎講解決啊,或者TiNa里能不能
    發(fā)表于 09-14 07:39

    UTB定位技術(shù)能不能精準(zhǔn)定位

    在當(dāng)今科技日新月異的時(shí)代,定位技術(shù)以其廣泛的應(yīng)用場(chǎng)景和不斷提升的精度,成為了多個(gè)領(lǐng)域的核心支撐。其中,UTB定位技術(shù)以其高精度、低延遲和高抗干擾性等特點(diǎn),在眾多定位技術(shù)中脫穎而出,成為精準(zhǔn)定位領(lǐng)域的佼佼者。那么,UTB定位技術(shù)到底能不能精準(zhǔn)定位呢?下面就給大家具體介紹一下關(guān)于UTB定位技術(shù)。
    的頭像 發(fā)表于 09-03 10:07 ?431次閱讀

    hex文件如何查看原c語言代碼

    直接將 .hex 文件轉(zhuǎn)換回原始的 C 語言代碼是不可能的,因?yàn)?.hex 文件是二進(jìn)制文件,它包含
    的頭像 發(fā)表于 09-02 10:37 ?2775次閱讀

    重復(fù)頭文件的固定結(jié)構(gòu)

    年輕人,你可曾記得,在修習(xí)C語言的時(shí)候,見過這樣的字句:在創(chuàng)建頭文件的時(shí)候,一定要加入保護(hù)宏。
    的頭像 發(fā)表于 08-29 10:23 ?403次閱讀
    可<b class='flag-5'>重復(fù)</b><b class='flag-5'>頭文件</b>的固定結(jié)構(gòu)

    能不能增大LWIP sockets數(shù)超過16個(gè)?

    “sys/types.h”限制FD_SETSIZE為64。公司的項(xiàng)目用ESP32方案,用到了很多組播,還有個(gè)服務(wù)端,配置文件限制了LWIP能使用sockets數(shù)最大為16,則分配socket號(hào)從48開始,一旦超過63就會(huì)導(dǎo)致select失敗。請(qǐng)問下,能不能增大LWIP s
    發(fā)表于 06-13 07:47

    components包含頭文件錯(cuò)誤是怎么回事?

    我新建了一個(gè)工程,添加了一個(gè)BLE組件,現(xiàn)在我在BLE組件的頭文件包含了如下文件Code: Select all #include \"api/esp_gatt_common_api.h
    發(fā)表于 06-06 07:21

    C語言中,同一個(gè)函數(shù)能不能被定義兩次?

    稍微有點(diǎn)C語言基礎(chǔ)的同學(xué),一定知道不能這樣做。
    的頭像 發(fā)表于 05-11 18:27 ?1889次閱讀

    請(qǐng)問頭文件能不能定義變量呢?

    最近在編譯一個(gè)工程的時(shí)候,突然遇到了變量重復(fù)定義的問題,根據(jù)提示打開這幾個(gè) C 文件,并沒有發(fā)現(xiàn)定義變量的地方。后來再找一找,原來變量定義在了頭文件里面。
    的頭像 發(fā)表于 04-28 09:33 ?1268次閱讀

    C語言中頭文件

    #include 指令會(huì)指示 C 預(yù)處理器瀏覽指定的文件作為輸入。預(yù)處理器的輸出包含了已經(jīng)生成的輸出,被引用文件生成的輸出以及 #include 指令之后的文本輸出。
    發(fā)表于 02-23 14:06 ?522次閱讀

    C語言中的動(dòng)態(tài)內(nèi)存管理講解

    本章將講解 C 中的動(dòng)態(tài)內(nèi)存管理。C 語言為內(nèi)存的分配和管理提供了幾個(gè)函數(shù)。這些函數(shù)可以在 頭文件中找到。
    的頭像 發(fā)表于 02-23 14:03 ?434次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的動(dòng)態(tài)內(nèi)存管理講解
    百家乐投注程式| 百家乐怎么出千| 百家乐官网是赌博吗| 游戏机百家乐作弊| 真人百家乐官网网站接口| 威尼斯人娱乐城线路| 澳门百家乐园游戏| 现金百家乐官网网上娱乐| 德州扑克牌型| 免费百家乐奥| 百家乐在发牌技巧| 百家乐官网注码技术打法| 十六蒲娱乐城| 菲律宾太阳城88| 百家乐网络游戏平台| 百家乐官网这样赢保单分析| 免费百家乐官网规则| 大发888 赌博网站| 网络百家乐的玩法技巧和规则| 百家乐美女视频| 澳门博彩有限公司| 财富百家乐的玩法技巧和规则| 百家乐网娱乐城| 百家乐官网赌博赌博网站| 百家乐官网赢钱密籍| 至尊娱乐城| 云鼎娱乐城信誉| 大发888有银钱的吗| 百家乐庄闲排列| 太阳城百家乐出千技术| 娱乐城百家乐官网的玩法技巧和规则 | 全景网百家乐官网的玩法技巧和规则| 百家乐官网高手和勒威| 百家乐官网有看牌器吗| 百家乐官网断缆赢钱| 游戏厅百家乐官网技巧| 江陵县| 株洲县| 百家乐官网没有必胜| 百家乐官网公式计算| 百家乐官网连赢的策略|