女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

C語言中常見預編譯指令的靈活秒用

strongerHuang ? 來源:技術讓夢想更偉大 ? 作者:技術讓夢想更偉大 ? 2021-04-27 11:18 ? 次閱讀

有時候出于對程序代碼優化的考慮。希望只對其中一部分內容進行編譯。此時就需要在程序中加上條件,讓編譯器只對滿足條件的代碼進行編譯,將不滿足條件的代碼舍棄,這就是條件編譯。

常見的預編譯指令如下:

1.條件編譯功能預處理程序提供了條件編譯的功能。條件編譯允許只編譯源文件中滿足條件的程序段,使生成的目標程序較短,從而減少了內存的開銷,并提高程序的效率,可以按不同的 條件去編譯不同的程序部分,因而產生不同的目標代碼文件,提高了程序的可移植性和靈活性。

2.應用舉例#undef可以取消宏定義,與#define對應。

#define#define命令定義一個宏:,按照是否帶參數通常分為對象宏、函數宏兩種。

對象宏: 不帶參數的宏被稱為“對象宏(objectlike macro)”。對象宏多用于定義常量、通用標識。例如:

// 常量定義#define MAX_LENGTH 100// 通用標識,日志輸出宏#define SLog printf// 預編譯宏#define _DEBUG

函數宏:帶參數的宏。利用宏可以提高代碼的運行效率: 子程序的調用需要壓棧出棧, 這一過程如果過于頻繁會耗費掉大量的CPU運算資源。所以一些代碼量小但運行頻繁的代碼如果采用帶參數宏來實現會提高代碼的運行效率。但多數c++程序不推薦使用函數宏,調試上有一定難度,可考慮使用c++的inline代替之。例如:

// 最小值函數#define MIN(a,b) ((a)》(b)? (a):(b))// 安全釋放內存函數#define SAFE_DELETE(p) {if(NULL!=p){delete p; p = NULL;}}

defined用來測試某個宏是否被定義。defined(name): 若宏被定義,則返回1,否則返回0。可用于在一條判斷語句中聲明多個判別條件,例如:

#if defined(VAX) && defined(UNIX) && !defined(DEBUG)

#ifdef、#ifndef、#else、#endif#ifdef用于判斷某個宏是否定義,和#ifndef功能正好相反,二者僅支持判斷單個宏是否已經定義

#ifdef ABC// codes while definded ABC#elif (VERSION 》 2)// codes while CODE_VERSION 》 2#else// remained cases#endif //

#ifndef ABCD_H#define ABCD_H// some declaration codes#endif // #ifndef ABCD_H

#if、#elif、#else、#endif#if可支持同時判斷多個宏的存在,與常量表達式配合使用。常用格式如下:

#if 常量表達式1// some codes#elif 常量表達式2// other codes#elif 常量表達式3// #else// statement#endif

常量表達式可以是包含宏、算術運算、邏輯運算等等的合法C常量表達式,如果常量表達式為一個未定義的宏, 那么它的值被視為0。

3.特別注意

#if 和 #ifdef的區別

在判斷某個宏是否被定義時,應當避免使用#if,因為該宏的值可能就是被定義為0。而應當使用#ifdef或#ifndef。看兩段段代碼,哪段代碼會被編譯進去,強調下是編譯進去,不是執行。

#define XXX 0// 第一段條件編譯#ifdef XXX 邏輯1#else 邏輯2#endif

#define XXX 0// 第二段條件編譯#if XXX 邏輯1#else 邏輯2#endif

第一段條件編譯:邏輯1會被編譯進去

第二段條件編譯:邏輯2會被編譯進去

區別:#if既關心宏是否定義,又關心宏的邏輯的真假#ifdef(#if defined())、#ifndef(#if !defined())僅僅關心宏是否被定義,不關心宏的邏輯真假

#if 0 或 #if 1注釋當屏蔽掉大塊代碼時,使用“#if 0”比使用“/**/”要好。(因為用“/**/”做大段的注釋時,需要防止被注釋掉的代碼段中有嵌套的“/**/”,一旦出現“/**/”嵌套“/**/”的情況,會導致你注釋掉的代碼區域并不是你想要的區域范圍)

1)常見的一種,如有一段不想要的代碼,可以直接用“#if 0 #endif”形式來注釋,效果等同于“/**/”

#if 0 code#endif

2)選擇結構的條件編譯。(如果常量為真【非0,隨便什么數字,只要不是0】,就執行程序段1,否則執行程序段2。)

#if constant code 1#else code 2#endif

3)嵌套情況。(如果常量a為真【非0,隨便什么數字,只要不是0】,就執行程序段1。當常量a為0且常量b為真時,執行程序段2;當常量a為0且常量b為0時,執行程序段3)

#if constant a code1#else #if constant b code 2 #else code 3 #endif#endif

4.總結

有些程序在調試、兼容性、平臺移植等情況下可能想要通過簡單地設置一些參數就生成一個不同的軟件,這當然可以通過變量設置,把所有可能用到的代碼都寫進去,在初始化時配置,但在不同的情況下可能只用到一部分代碼,就沒必要把所有的代碼都寫進去,就可以用條件編譯,條件編譯是為了讓程序在各種不同的軟硬件環境下都以運行,提高其可移植性。

原文標題:C 語言#if、#elif、#ifdef的靈活秒用

文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    180

    文章

    7630

    瀏覽量

    140267

原文標題:C 語言#if、#elif、#ifdef的靈活秒用

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    深入理解C語言C語言循環控制

    改變程序的執行流程,使代碼更加靈活和可控。本文將詳細介紹這些語句的作用及其應用場景,并通過示例代碼進行說明。Part.1break語句C語言中break語句有兩種
    的頭像 發表于 04-29 18:49 ?782次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環控制

    棱鏡——機器視覺系統中常見的重要配件

    棱鏡——機器視覺系統中常見的重要配件
    的頭像 發表于 01-15 17:36 ?459次閱讀
    棱鏡——機器視覺系統<b class='flag-5'>中常見</b>的重要配件

    EE-62:在C語言中訪問短字內存

    電子發燒友網站提供《EE-62:在C語言中訪問短字內存.pdf》資料免費下載
    發表于 01-07 14:02 ?0次下載
    EE-62:在<b class='flag-5'>C</b><b class='flag-5'>語言中</b>訪問短字內存

    EE-128:C語言中的DSP:從C調用匯編類成員函數

    電子發燒友網站提供《EE-128:C語言中的DSP:從C調用匯編類成員函數.pdf》資料免費下載
    發表于 01-07 13:48 ?0次下載
    EE-128:<b class='flag-5'>C</b><b class='flag-5'>語言中</b>的DSP:從<b class='flag-5'>C</b>調用匯編類成員函數

    Triton編譯器支持的編程語言

    Triton編譯器支持的編程語言主要包括以下幾種: 一、主要編程語言 Python :Triton編譯器通過Python接口提供了對Triton語言
    的頭像 發表于 12-24 17:33 ?855次閱讀

    Triton編譯器功能介紹 Triton編譯器使用教程

    Triton 是一個開源的編譯器前端,它支持多種編程語言,包括 CC++、Fortran 和 Ada。Triton 旨在提供一個可擴展和可定制的
    的頭像 發表于 12-24 17:23 ?1494次閱讀

    C語言中申請的堆內存能不能自動釋放

    C語言中申請的堆內存能不能自動釋放?每次都要手動 free 太麻煩,也容易忘記。 學過 C++ 的同學,應該首先能想到智能指針。 但是這是C語言
    的頭像 發表于 11-27 09:33 ?451次閱讀

    C語言中的頭文件能不能重復包含

    C語言中的頭文件能不能重復包含? 比如代碼寫成這樣,stdio.h 連續包含了兩次。 #include #include int main(){ printf("helloworld
    的頭像 發表于 11-26 17:19 ?492次閱讀

    C語言關鍵字分別發生在哪個階段

    以下C語言關鍵字,分別發生在哪個階段? 第一個,define。 首先得糾正一下,define 并不是C語言里面的關鍵字,即使加了井號,也不是。 define 屬于
    的頭像 發表于 11-24 10:31 ?510次閱讀

    技術干貨驛站 ▏深入理解C語言:掌握C語言條件判斷,從if到switch的應用

    語句和條件運算符。這些結構不僅增強了代碼的靈活性,還提高了程序的可讀性和可維護性。本文將深入探討C語言中的主要條件判斷語句,包括它們的語法、使用方法及實際應用,通過
    的頭像 發表于 11-09 01:10 ?776次閱讀
    技術干貨驛站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b>條件判斷,從if到switch的應用

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?1024次閱讀

    C語言中最常見的宏定義寫法

    如果讓你C語言寫個宏定義,我相信大部分同學順手就能寫出define。
    的頭像 發表于 10-28 11:12 ?735次閱讀

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

    直接將 .hex 文件轉換回原始的 C 語言代碼是不可能的,因為 .hex 文件是二進制文件,它包含了單片機程序編譯后的機器碼,這些機器碼與原始的 C
    的頭像 發表于 09-02 10:37 ?4361次閱讀

    c語言中從左到右結合怎么看

    C語言中,操作符的結合性(Associativity)是指當操作符在表達式中連續出現時,它們如何與操作數結合的順序。對于大多數二元操作符(即需要兩個操作數的操作符),C語言遵循兩種基
    的頭像 發表于 08-20 11:42 ?1455次閱讀

    SEGGER編譯器優化和安全技術介紹 支持最新CC++語言

    SEGGER編譯器是專門為ARM和RISC-V微控制器設計的優化C/C++編譯器。它建立在強大的Clang前端上,支持最新的C
    的頭像 發表于 06-04 15:31 ?1847次閱讀
    SEGGER<b class='flag-5'>編譯</b>器優化和安全技術介紹 支持最新<b class='flag-5'>C</b>和<b class='flag-5'>C</b>++<b class='flag-5'>語言</b>