論C/C++的條件編譯#if、#ifdef、#ifndef、#undef

我們以實例來演示:
------------------------------------------實驗①------------------------------------------
子函數:
在這里插入圖片描述
主函數:
在這里插入圖片描述
當定義了COMMENT_FLAG該宏,且其為0,則運行結果如下:只執行了sub_func_1函數。
在這里插入圖片描述

------------------------------------------實驗②------------------------------------------
子函數:
在這里插入圖片描述
主函數:
在這里插入圖片描述
當定義了COMMENT_FLAG該宏,且其為1,則運行結果如下:執行了sub_func_0、sub_func_1函數。
在這里插入圖片描述
實驗結論:
對于#if,宏COMMENT_FLAG被定義為1,則其條件編譯有效;宏COMMENT_FLAG被定義為0,則其條件編譯無效。其效果類似于 if 行為。
對于#ifdef,只要定義了宏COMMENT_FLAG,無論其是被定義為1或0,都可執行其條件編譯內容。
至于#ifndef的作用,與#ifdef是相反的,宏COMMENT_FLAG只要沒有被定義,則執行#ifndef的條件編譯。

還有一個#undef,可以在定義COMMENT_FLAG該宏后,取消其定義。簡單做個實驗:
在這里插入圖片描述

在第48行,使用了 #undef COMMENT_FLAG,無任何運行結果,即sub_func_0、sub_func_1函數都沒有被執行。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89585.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89585.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89585.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

21、鴻蒙Harmony Next開發:組件導航(Navigation)

目錄 設置頁面顯示模式 設置標題欄模式 設置菜單欄 設置工具欄 路由操作 頁面跳轉 頁面返回 頁面替換 頁面刪除 移動頁面 參數獲取 路由攔截 單例跳轉 子頁面 頁面顯示類型 頁面生命周期 頁面監聽和查詢 頁面轉場 關閉轉場 自定義轉場 共享元素轉場 跨包…

“外賣大戰”正在改變國內“大零售”

出品 | 何璽排版 | 葉媛7月18日,市場監管總局約談美團、餓了么、京東三家外賣平臺,要求“理性競爭、規范促銷”,劍指近期愈演愈烈的“0元購”“0.1秒殺”等外賣補貼亂象。但約談之后,平臺們是真整改,還是玩話術&#x…

當CAN握手EtherCAT:視覺檢測系統的“雙芯合璧”時代來了

在汽車制造的高速生產線上,設備間的“語言不通”曾是工程師們的頭疼事:CAN總線像踏實的老司機,穩扎穩打傳輸傳感器數據;而EtherCAT網關則是追求極致速度的“閃電俠”,主導著實時控制的重任。當視覺檢測系統需要同時對接…

【C語言】動態內存管理全解析:malloc、calloc、realloc與free的正確使用

C語言學習 動態內存分配 友情鏈接:C語言專欄 文章目錄C語言學習前言:一、為什么要有動態內存分配二、malloc和free2.1 malloc2.2 free三、calloc和realloc3.1 calloc3.2 realloc總結附錄上文鏈接下文鏈接專欄前言: 在C語言編程中&#xff0…

基于Arduino智能家居環境監測系統—以光照強度檢測修改

2 相關技術與理論 2.1 Arduino 技術 Arduino 是一款廣受歡迎的開源電子原型平臺,由硬件和軟件組成,為開發者提供了便捷且低成本的解決方案,尤其適用于快速搭建交互式電子項目,在本智能家居環境監測系統中擔當核心角色。? 硬件方…

前端上傳 pdf 文件 ,前端自己解析出來 生成界面 然后支持編輯

要在前端解析 PDF 文件并生成可編輯界面,我們可以使用 PDF.js 庫來解析 PDF 內容,然后將其轉換為可編輯的 HTML 元素。 主要特點和工作原理如下: PDF 解析: 使用 Mozilla 的 PDF.js 庫解析 PDF 文件內容,提取文本信息。…

Linux“一切皆文件“設計哲學 與 Linux文件抽象層:struct file與file_operations的架構解析

在Linux系統中,“一切皆文件”(Everything is a file)是一個核心設計哲學,它抽象了系統資源的訪問方式,使得幾乎所有硬件設備、進程、網絡連接等都可以通過統一的文件接口(如open()、read()、write()、clos…

藍橋杯零基礎到獲獎-第3章 C++ 變量和常量

藍橋杯零基礎到獲獎-第3章 C 變量和常量 文章目錄一、變量和常量1.變量的創建2.變量初始化3.變量的分類4.常量4.1 字?常量4.2 #define定義常量4.3 const 定義常量4.4 練習練習1:買票https://www.nowcoder.com/practice/0ad8f1c0d7b84c6d8c560298f91d5e66練習2&…

物理AI是什么技術?

當英偉達CEO黃仁勛在鏈博會上明確提出“物理AI將是AI的下一浪潮”時,這個看似陌生的概念瞬間引發了科技圈的廣泛關注。究竟什么是物理AI?它與我們熟悉的人工智能有何不同?又將如何重塑我們與物理世界的交互方式? 物理AI&#xff1…

GRIB數據處理相關指令

GRIB 數據格式簡介 GRIB(General Regularly distributed Information in Binary form),是由世界氣象組織(WMO)設計和維護的一種用于存儲和傳輸網格數據的標準數據格式,它是一種自描述的二進制壓縮格式,通常具有擴展名…

微服務學習(六)之分布式事務

微服務學習(六)之分布式事務一、認識Seata二、部署TC服務1、準備數據庫表2、準備配置文件3、docker部署三、微服務集成seata1、引入依賴2、改造配置3、添加數據庫表4、測試四、XA模式1、兩階段提交2、seata的XA模型3、優缺點4、實現步驟五、AT模式1、Sea…

Go實現用戶登錄小程序

寫一個用戶登錄注冊的小程序 運行程序,給出提示1. 注冊輸入用戶名、密碼、年齡、性別 {"用戶名": "root", "passwd": "123456", "age": 18, "sex": "男"}注冊前要判斷是否存在此用戶2. 登錄…

鴻蒙藍牙通信

https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-bluetooth-low-energy 藍牙權限 module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.ACCESS_BLUETOOTH","reason": "…

Java:Map

文章目錄Map常用方法Map遍歷的三種方法先獲取Map集合的全部鍵,再通過遍歷來找值Entry對象forEach結合lambda表達式Map 案例分析需求我的代碼(不好)老師的代碼(好)好在哪里另外集合分為Collection和MapMap常用方法 代碼…

fastjson2 下劃線字段轉駝峰對象

在對接第三方或查詢數據庫時,返回的字段是下劃線分隔的,而在業務中需要轉成java對象,java對象的字段是駝峰的,使用fastjson2時,有兩種方法可以實現: 比如數據格式是: {"item_id": &q…

【硬件】藍牙音頻協議

1. 無線音頻傳輸的工作原理 在無線傳輸的過程中,音源設備首先將MP3、FLAC等音頻文件還原為PCM格式。通過藍牙音頻編碼轉為藍牙無線傳輸的文件,發送到音頻設備段。將藍牙無線傳輸的文件再次還原為PCM格式,之后轉為模擬信號并放大,通…

【宇樹科技:未來1-3年,機器人可流水線打螺絲】

在第三屆中國國際供應鏈促進博覽會上,宇樹科技工作人員表示,未來1到3年內,機器人產品有望從單一工業化產品,發展至復合化工業場景,如機器人搬完箱子后,換個 “手” 就能在流水線上打螺絲。在3到10年內&…

Spring AI 1.0版本 + 千問大模型之 文本記憶對話

上篇文章,主要是簡單講解了一下文本對話的功能。由于模型不具備上下文記憶功能,只能一問一答。因此我們需要實現記憶對話功能,這樣大模型回答信息才能夠更加準確。 1、pom依賴 項目構建就不詳細說了,大家可以參考上篇 文本對話 文…

測試學習之——Pytest Day2

一、Pytest配置框架Pytest的配置旨在改變其默認行為,以適應不同的測試需求和項目結構。理解其配置層級和常用參數,是高效使用Pytest的基礎。1. 配置的意義與層級配置的本質在于提供一種機制,允許用戶根據項目特點、團隊規范或特定測試場景&am…

Go-Redis × RediSearch 全流程實踐

1. 連接 Redis ctx : context.Background()rdb : redis.NewClient(&redis.Options{Addr: "localhost:6379",Password: "",DB: 0,Protocol: 2, // 推薦 RESP2// UnstableResp3: true, // 若要體驗 RESP3 Raw* })2. 準備示例數據 u…