哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

C/C++中兩種宏實現(xiàn)方式

STM32嵌入式開發(fā) ? 來源:csdn ? 2024-04-19 11:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 #pragma once有什么作用?

為了避免同一個頭文件被包含(include)多次,C/C++中有兩種宏實現(xiàn)方式: 一種是#ifndef方式; 另一種是#pragma once方式。 在能夠支持這兩種方式的編譯器上,二者并沒有太大的區(qū)別。但兩者仍然有一些細微的區(qū)別。

2 兩者的使用方式有何區(qū)別

示例代碼如下:


//方式一:
#ifndef  __SOMEFILE_H__
#define   __SOMEFILE_H__
 ... ... // 聲明、定義語句
#endif


//方式二:
#pragma once
 ... ... // 聲明、定義語句
3 兩者各有何特點

(1)#ifndef

#ifndef的方式受C/C++語言標準支持。它不僅可以保證同一個文件不會被包含多次,也能保證內(nèi)容完全相同的兩個文件(或者代碼片段)不會被不小心同時包含。 當然,缺點就是如果不同頭文件中的宏名不小心“撞車”,可能就會導(dǎo)致你看到頭文件明明存在,但編譯器卻硬說找不到聲明的狀況——這種情況有時非常讓人郁悶。 由于編譯器每次都需要打開頭文件才能判定是否有重復(fù)定義,因此在編譯大型項目時,ifndef會使得編譯時間相對較長,因此一些編譯器逐漸開始支持#pragma once的方式。

(2)#pragma once

#pragma once 一般由編譯器提供保證:同一個文件不會被包含多次。注意這里所說的“同一個文件”是指物理上的一個文件,而不是指內(nèi)容相同的兩個文件。 你無法對一個頭文件中的一段代碼作pragma once聲明,而只能針對文件。 其好處是,你不必再擔心宏名沖突了,當然也就不會出現(xiàn)宏名沖突引發(fā)的奇怪問題。大型項目的編譯速度也因此提高了一些。 對應(yīng)的缺點就是如果某個頭文件有多份拷貝,本方法不能保證他們不被重復(fù)包含。當然,相比宏名沖突引發(fā)的“找不到聲明”的問題,這種重復(fù)包含很容易被發(fā)現(xiàn)并修正。 另外,這種方式不支持跨平臺!

4 兩者之間有什么聯(lián)系?

#pragma once 方式產(chǎn)生于#ifndef之后,因此很多人可能甚至沒有聽說過。目前看來#ifndef更受到推崇。 因為#ifndef受C/C++語言標準的支持,不受編譯器的任何限制; 而#pragma once方式卻不受一些較老版本的編譯器支持,一些支持了的編譯器又打算去掉它,所以它的兼容性可能不夠好。 一般而言,當程序員聽到這樣的話,都會選擇#ifndef方式,為了努力使得自己的代碼“存活”時間更久,通常寧愿降低一些編譯性能,這是程序員的個性,當然這是題外話啦。 還看到一種用法是把兩者放在一起的


#pragma once
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__


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


#endif
總結(jié): 看起來似乎是想兼有兩者的優(yōu)點。 不過只要使用了#ifndef就會有宏名沖突的危險,也無法避免不支持#pragma once的編譯器報錯,所以混用兩種方法似乎不能帶來更多的好處,倒是會讓一些不熟悉的人感到困惑。 選擇哪種方式,應(yīng)該在了解兩種方式的情況下,視具體情況而定。 只要有一個合理的約定來避開缺點,我認為哪種方式都是可以接受的。 而這個已經(jīng)不是標準或者編譯器的責任了,應(yīng)當由程序員自己或者小范圍內(nèi)的開發(fā)規(guī)范來搞定。 為了避免同一個文件被include多次:

#ifndef方式

#pragma once方式

在能夠支持這兩種方式的編譯器上,二者并沒有太大的區(qū)別,但是兩者仍然還是有一些細微的區(qū)別。


方式一:

#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... // 一些聲明語句
#endif


方式二:


#pragma once
... ... // 一些聲明語句
#ifndef的方式依賴于宏名字不能沖突,這不光可以保證同一個文件不會被包含多次,也能保證內(nèi)容完全相同的兩個文件不會被不小心同時包含。 當然,缺點就是如果不同頭文件的宏名不小心“撞車”,可能就會導(dǎo)致頭文件明明存在,編譯器卻硬說找不到聲明的狀況。 #pragma once則由編譯器提供保證:同一個文件不會被包含多次。 注意這里所說的“同一個文件”是指物理上的一個文件,而不是指內(nèi)容相同的兩個文件。帶來的好處是,你不必再費勁想個宏名了,當然也就不會出現(xiàn)宏名碰撞引發(fā)的奇怪問題。 對應(yīng)的缺點就是如果某個頭文件有多份拷貝,本方法不能保證他們不被重復(fù)包含。 當然,相比宏名碰撞引發(fā)的“找不到聲明”的問題,重復(fù)包含更容易被發(fā)現(xiàn)并修正。 方式一 由語言支持所以移植性好, 方式二 可以避免名字沖突。
審核編輯:黃飛

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

    關(guān)注

    183

    文章

    7645

    瀏覽量

    146056
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2124

    瀏覽量

    77333
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51866

原文標題:C語言#pragma once的用法

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    C語言實現(xiàn)面向?qū)ο蟮?b class='flag-5'>方式 C++的class的運行原理

    這里主要介紹下在C語言中是如何實現(xiàn)的面向?qū)ο蟆V懒?b class='flag-5'>C語言實現(xiàn)面向?qū)ο蟮?b class='flag-5'>方式,再聯(lián)想下,C++
    發(fā)表于 10-21 09:00 ?1808次閱讀

    C語言中實現(xiàn)函數(shù)的三方式

    的第一個分號后便結(jié)束。即 a = b 和 b = tmp 均不受控制語句所作用。 因此,在工程,一般使用三方式來對函數(shù)進行封裝,
    發(fā)表于 12-29 07:34

    兩種方式實現(xiàn)C語言訪問MCU寄存器

    來源 網(wǎng)絡(luò)單片機的特殊功能寄存器SFR,是SRAM地址已經(jīng)確定的SRAM單元,在C語言環(huán)境下對其訪問歸納起來有兩種方法。 1、采用標準C的強制類型轉(zhuǎn)換和指針來實現(xiàn) 采用標準
    發(fā)表于 04-19 14:45

    如何實現(xiàn)C語言訪問MCU寄存器?掌握這兩種方式就夠了!

    單片機的特殊功能寄存器SFR,是SRAM地址已經(jīng)確定的SRAM單元,在C語言環(huán)境下對其訪問歸納起來有兩種方法。1、采用標準C的強制類型轉(zhuǎn)換和指針來實現(xiàn)采用標準
    發(fā)表于 03-08 09:42

    SQL語句的兩種嵌套方式

    一般情況下,SQL語句是嵌套在宿主語言(如C語言)的。有兩種嵌套方式:1.調(diào)用層接口(CLI):提供一些庫,庫的函數(shù)和方法
    發(fā)表于 05-23 08:51

    SQL語言的兩種使用方式

    SQL語言的兩種使用方式在終端交互方式下使用,稱為交互式SQL嵌入在高級語言的程序中使用,稱為嵌入式SQL―高級語言如C、Java等,稱為宿主語言嵌入式SQL的
    發(fā)表于 12-20 06:51

    淺談關(guān)于DSP6000C/C++語言和匯編語言的混合編程的方法

    一、混合編程的方法主要有以下幾種: (1)獨立編寫C語言程序和匯編程序,分別編譯形成各自的目標代碼塊, 然后用連接器將兩種模塊連接起來。 (2)直接在C/C++程序
    發(fā)表于 10-24 10:10 ?1次下載

    C/C++ 詳解

    眾多C++書籍都忠告我們C語言是萬惡之首,但事情總不如我們想象的那么壞,就如同goto一樣。有一個很大的作用,就是自動為我們產(chǎn)生代碼。如果說模板 眾多
    發(fā)表于 09-21 12:55 ?1952次閱讀

    使用51單片機C語言和匯編兩種方式實現(xiàn)設(shè)計時鐘的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機C語言和匯編兩種方式實現(xiàn)設(shè)計時鐘的程序免費下載。
    發(fā)表于 06-18 17:44 ?4次下載
    使用51單片機<b class='flag-5'>C</b>語言和匯編<b class='flag-5'>兩種</b><b class='flag-5'>方式</b><b class='flag-5'>實現(xiàn)</b>設(shè)計時鐘的程序免費下載

    虛擬機的設(shè)計與實現(xiàn):C\C++

    虛擬機的設(shè)計與實現(xiàn):C\C++
    發(fā)表于 02-21 15:10 ?0次下載

    C語言和C++到底是什么關(guān)系

    首先C++C語言本來就是兩種不同的編程語言,但C++確實是對C語言的擴充和延伸,并且對C語言提
    的頭像 發(fā)表于 06-20 11:28 ?6449次閱讀

    在MATLAB/simulink建模時的兩種不同實現(xiàn)方式

    導(dǎo)讀:本期文章主要介紹在MATLAB/simulink建模時的兩種不同實現(xiàn)方式,一是直接用現(xiàn)成的文件庫
    的頭像 發(fā)表于 09-15 10:07 ?3086次閱讀

    MATLAB/simulink兩種實現(xiàn)建模方式的優(yōu)勢

    導(dǎo)讀:本期文章主要介紹在MATLAB/simulink建模時的兩種不同實現(xiàn)方式,一是直接用現(xiàn)成的文件庫
    的頭像 發(fā)表于 09-15 10:10 ?6599次閱讀

    如何選擇創(chuàng)建c語言和c++

    選擇創(chuàng)建 C 語言和 C++ 都需要綜合考慮多個因素。在決定使用哪種語言之前,我們需要對這兩種語言的特點、優(yōu)缺點、適用場景、學習成本等進行全面的了解和對比。下面是關(guān)于選擇創(chuàng)建 C 語言
    的頭像 發(fā)表于 11-27 15:58 ?1583次閱讀

    C++實現(xiàn)類似instanceof的方法

    函數(shù),可實際上C++沒有。但是別著急,其實C++中有兩種簡單的方法可以實現(xiàn)類似Java的in
    的頭像 發(fā)表于 07-18 10:16 ?1577次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>中</b><b class='flag-5'>實現(xiàn)</b>類似instanceof的方法
    大丰市| 灵宝市| 天全县| 陇川县| 彭山县| 安福县| 石景山区| 迁安市| 九龙县| 马鞍山市| 大同县| 双桥区| 根河市| 加查县| 延吉市| 白玉县| 武清区| 武汉市| 岳普湖县| 鄱阳县| 合水县| 柳河县| 南部县| 吉木乃县| 建湖县| 阳东县| 南投县| 平遥县| 砀山县| 鲁山县| 石棉县| 兴仁县| 石泉县| 芷江| 溧水县| 应城市| 仁怀市| 广安市| 峨眉山市| 江孜县| 仁布县|