#pragma 指令

#pragma 指令作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作

message 參數能夠在編譯信息輸出窗口中輸出相應的信息

#pragma message(“消息文本”)

code_seg參數能夠設置程序中函數代碼存放的代碼段,當我們開發驅動程序的時候就會使用到它

#pragma code_seg( [“section-name”[,“section-class”] ] )

保證頭文件被編譯一次

#pragma once

pragma warning

#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等價于:
#pragma warning(disable:4507 34) // 不顯示 4507 和 34 號警告信息
#pragma warning(once:4385) // 4385 號警告信息僅報告一次
#pragma warning(error:164) // 把 164 號警告信息作為一個錯誤。
#pragma warning( push [ ,n ] )
#pragma warning( pop )
#pragma warning( push ) :保存所有警告信息的現有的警告狀態。
#pragma warning( push, n):保存所有警告信息的現有的警告狀態,并且把全局警告等級設定為 n。
#pragma warning( pop ):向棧中彈出最后一個警告信息,在入棧和出棧之間所作的一切改動取消

將一個注釋記錄放入一個對象文件或可執行文件中
#pragma comment(…)

常用的 lib 關鍵字,可以幫我們鏈入一個庫文件

#pragma comment(lib, “user32.lib”) // 該指令用來將 user32.lib 庫文件加入到本工程中。

linker關鍵字將一個鏈接選項放入目標文件中

#pragma comment(linker, “/include:__mySymbol”)

# if !defined(BOOST_ASIO_NO_DEFAULT_LINKED_LIBS)
#  if defined(UNDER_CE)
#   pragma comment(lib, "ws2.lib")
#  elif defined(_MSC_VER) || defined(__BORLANDC__)
#   pragma comment(lib, "ws2_32.lib")
#   if !defined(BOOST_ASIO_WINDOWS_APP)
#    pragma comment(lib, "mswsock.lib")
#   endif // !defined(BOOST_ASIO_WINDOWS_APP)
#  endif // defined(_MSC_VER) || defined(__BORLANDC__)
# endif // !defined(BOOST_ASIO_NO_DEFAULT_LINKED_LIBS)

內存對齊

#pragma pack

// memAlign.c
// gcc memAlign.c -o memAlign
#include <stdio.h>
#include <stddef.h>#pragma pack (4)
typedef struct st
{char c;		// 起始地址 0; 結束地址 1int  i;		// 起始地址 4; 結束地址 8double d;	// 起始地址 8; 結束地址 16
}ST; // 結構體大小 16 字節typedef struct st2
{char c;         int  i;        ST   st;       double d;       char c2;       ST   st_arr[3];long l;     int  i_arr[9]; 
}ST2;
#pragma pack ()int main(void)
{printf("c:%zu i:%zu st:%zu d:%zu c2:%zu st_arr:%zu l:%zu i_arr:%zu\n", offsetof(ST2, c), offsetof(ST2, i), offsetof(ST2, st), offsetof(ST2, d), offsetof(ST2, c2), offsetof(ST2, st_arr), offsetof(ST2, l), offsetof(ST2, i_arr));return 0;
}

#pragma pack(n) 的n只能是2的次方冪,目前測試了,n的值可以為1、2、3、8、16,當設置32時會報錯
使用指令#pragma pack (n),編譯器將按照 n 個字節對齊。
使用指令#pragma pack (),編譯器將取消自定義字節對齊方式。

#pragma pack (4)
typedef struct st
{char c;		// 起始地址 0; 結束地址 1int  i;		// 起始地址 4; 結束地址 8double d;	// 起始地址 8; 結束地址 16
}ST; // 結構體大小 16 字節typedef struct st2
{char c;         int  i;        ST   st;       double d;       char c2;       ST   st_arr[3];long l;     int  i_arr[9]; 
}ST2;
#pragma pack ()```go
#pragma pack (push)	// 保存現在的對齊參數 
#pragma pack (4)	// 將對齊參數改為 4
typedef struct st
{char c;		// 起始地址 0; 結束地址 1int  i;		// 起始地址 4; 結束地址 8double d;	// 起始地址 8; 結束地址 16
}ST; // 結構體大小 16 字節typedef struct st2
{char c;         int  i;        ST   st;       double d;       char c2;       ST   st_arr[3];long l;     int  i_arr[9]; 
}ST2;
#pragma pack (pop)	// 恢復之前保存的對齊參數
#pragma pack(push):保存當前對其方式到 packing stack;
#pragma pack(n):設置編譯器按照 n 個字節對齊;
#pragma pack(pop):packing stack 出棧,并設置為對齊參數;## 宏參數轉換為字符串常量#運算符```go
// preDel#.c
// gcc preDel#.c -E -o preDel#.i  //預編譯
// gcc preDel#.c    // 編譯
#include <stdio.h>
#define MY_STR(x) #x
#define SQR(x) printf("The square of "#x" is %d.\n", ((x)*(x)));
#define CALL(fun) (printf("CALL %s\n", #fun), fun())
void function()
{}
int main(void)
{printf("%s\n", MY_STR(Hello world!));SQR(8);CALL(function);	// 先打印函數名,再調用函數 return 0;
}
# 5 "preDel#.c" 2void function()
{}
int main(void)
{printf("%s\n", "Hello world!");printf("The square of ""8"" is %d.\n", ((8)*(8)));;(printf("CALL %s\n", "function"), function());return 0;
}

把宏參數跟一個字符串組合成一個符號

##運算符

// preDel##.c
// gcc preDel##.c -E -o preDel##.i  //預編譯
// gcc preDel##.c    // 編譯
#include <stdio.h>
#define __TXT_(name, ...) char g_txt_##name[]={__VA_ARGS__}
int main(void)
{__TXT_(str1, "this is str1");printf("str=[%s]\n",g_txt_str1);return 0;
}
# 2 "preDel##.c" 2int main(void)
{char g_txt_str1[]={"this is str1"};printf("str=[%s]\n",g_txt_str1);return 0;
}

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

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

相關文章

科技創新引領水利行業升級:深入分析智慧水利解決方案的核心價值,展望其在未來水資源管理中的重要地位與作用

目錄 引言 一、智慧水利的概念與內涵 二、智慧水利解決方案的核心價值 1. 精準監測與預警 2. 優化資源配置 3. 智能運維管理 4. 公眾參與與決策支持 三、智慧水利在未來水資源管理中的重要地位與作用 1. 推動水利行業轉型升級 2. 保障國家水安全 3. 促進生態文明建設…

下降npm版本

Node版本與NPM版本對應關系 Node版本與NPM版本對應關系_node對應npm版本-CSDN博客 要降低npm的版本&#xff0c;可以按照以下步驟進行操作 1.首先&#xff0c;打開終端或命令提示符窗口。 2.輸入以下命令來檢査當前安裝的npm版本: npm -v 3.如果你想要降低npm的版本&#xff…

vb.netcad二開自學筆記5:ActiveX鏈接CAD的.net寫法

一、必不可少的對象引用 使用activex需要在項目屬性中勾選以下兩個引用&#xff0c;若找不到&#xff0c;則瀏覽定位直接添加下面兩個文件&#xff0c;可以看到位于cad的安裝路徑下&#xff0c;圖中的3個mgd.dll也可以勾選。 C:\Program Files\Autodesk\AutoCAD 2024\Autodes…

實戰 | YOLOv8使用TensorRT加速推理教程(步驟 + 代碼)

導 讀 本文主要介紹如何使用TensorRT加速YOLOv8模型推理的詳細步驟與演示。 YOLOv8推理加速的方法有哪些? YOLOv8模型推理加速可以通過多種技術和方法實現,下面是一些主要的策略: 1. 模型結構優化 網絡剪枝:移除模型中不重要的神經元或連接,減少模型復雜度。 模型精…

中文大模型基準測評2024上半年報告

中文大模型基準測評2024上半年報告 原創 SuperCLUE CLUE中文語言理解測評基準 2024年07月09日 18:09 浙江 SuperCLUE團隊 2024/07 背景 自2023年以來&#xff0c;AI大模型在全球范圍內掀起了有史以來規模最大的人工智能浪潮。進入2024年&#xff0c;全球大模型競爭態勢日益加…

Obsidian 文檔編輯器

Obsidian是一款功能強大的筆記軟件 Download - Obsidian

降Compose十八掌之『見龍在田』| Modifier

公眾號「稀有猿訴」 原文鏈接 降Compose十八掌之『見龍在田』| Modifier 通過前面的文章我們學會了如何使用元素來構建和填充我們的UI頁面&#xff0c;但這只完成了一半&#xff0c;元素還需要裝飾&#xff0c;以及進行動畫和事件響應&#xff0c;這才能生成完整的UI。這…

2.5章節python中布爾類型

在Python中&#xff0c;布爾類型&#xff08;Boolean type&#xff09;用于表示真&#xff08;True&#xff09;或假&#xff08;False&#xff09;的值。這是編程中非常基礎且重要的一個概念&#xff0c;因為它允許程序進行條件判斷&#xff0c;從而根據條件執行不同的代碼塊。…

智慧校園行政辦公-紅頭文件功能概述

在智慧校園的行政辦公系統中&#xff0c;紅頭文件的管理功能是一項重要的組成部分&#xff0c;它極大地提升了文件處理的效率與規范性。該功能圍繞文件的創建、審批、歸檔等關鍵環節&#xff0c;進行了全面的數字化改造。 首先&#xff0c;系統內置了多種標準化的紅頭文件模板&…

一文實踐強化學習訓練游戲ai--doom槍戰游戲實踐

一文實踐強化學習訓練游戲ai–doom槍戰游戲實踐 上次文章寫道下載doom的環境并嘗試了簡單的操作&#xff0c;這次讓我們來進行對象化和訓練、驗證&#xff0c;如果你有基礎&#xff0c;可以直接閱讀本文&#xff0c;不然請你先閱讀Doom基礎知識&#xff0c;其中包含了下載、動作…

gsplat中的3D Gaussian Splatting as Markov Chain Monte Carlo的代碼解讀

總體 https://github.com/nerfstudio-project/gsplat simple_trainer_mcmc.py 2個關鍵點&#xff1a; 高斯狀態轉移&#xff08;每100iter調用&#xff09;高斯隨機過程&#xff08;每1iter調用&#xff09; relocate_gs 對 alive gs 進行采樣&#xff0c;被采樣的 alive…

打開ps提示dll文件丟失如何解決?教你幾種靠譜的方法

在日常使用電腦過程中&#xff0c;由于不當操作&#xff0c;dll文件丟失是一種常見現象。當dll文件丟失時&#xff0c;程序將無法正常運行&#xff0c;比如ps&#xff0c;pr等待軟件。此時&#xff0c;我們需要對其進行修復以恢復其功能&#xff0c;下面我們一起來了解一下出現…

【堆 (優先隊列) 掃描線】218. 天際線問題

本文涉及知識點 堆 &#xff08;優先隊列) 掃描線 LeetCode218. 天際線問題 城市的 天際線 是從遠處觀看該城市中所有建筑物形成的輪廓的外部輪廓。給你所有建筑物的位置和高度&#xff0c;請返回 由這些建筑物形成的 天際線 。 每個建筑物的幾何信息由數組 buildings 表示&…

景芯SoC訓練營DFT debug

景芯訓練營VIP學員在實踐課上遇到個DFT C1 violation&#xff0c;導致check_design_rule無法通過&#xff0c;具體報錯如下&#xff1a; 遇到這個問題第一反映一定是確認時鐘&#xff0c;于是小編讓學員去排查add_clock是否指定了時鐘&#xff0c;指定的時鐘位置是否正確。 景芯…

C語言文件操作-文件IO(系統調用)

文件IO (系統調用) 文件描述符open函數read函數write函數lseek函數close函數dup函數dup2函數 stat函數getpwuid函數getgrgid函數 實例 目錄操作 opendir函數readdir函數rewinddir函數closedir函數實例 文件IO (系統調用) 文件IO就是系統調用&#xff0c;用戶空間進入內核空間…

2024年信息系統項目管理師1批次上午客觀題參考答案及解析(3)

51、探索各種選項&#xff0c;權衡包括時間與成本、質量與成本、風險與進度、進度與質量等多種因素&#xff0c;在整個過程中&#xff0c;舍棄無效或次優的替代方案&#xff0c;這種不確定性應對方法是()。 A&#xff0e;集合設計 B&#xff0e;堅韌性 C&#xff0e;多種結果…

離線運行Llama3:本地部署終極指南_liama2 本地部署

4月18日&#xff0c;Meta在官方博客官宣了Llama3&#xff0c;標志著人工智能領域邁向了一個重要的飛躍。經過筆者的個人體驗&#xff0c;Llama3 8B效果已經超越GPT-3.5&#xff0c;最為重要的是&#xff0c;Llama3是開源的&#xff0c;我們可以自己部署&#xff01; 本文和大家…

衡量股票價值的尺度

勞倫女士說&#xff0c;“鄧普頓獵取便宜股的時候&#xff0c;總是運用證券分析師的‘一百種價值衡量尺度’中的好幾種。 原因之一呢&#xff0c;就是因為任何一種衡量方法都是萬能的&#xff0c;在不同的時期、不同的市場環境下&#xff0c;總會有它自己的局限性。就像有朋友…

大數據------JavaWeb------FilterListenerAJAXAxiosJSON

Filter Filter簡介 定義&#xff1a;Filter表示過濾器&#xff0c;是JavaWeb三大組件&#xff08;Servlet、Filter、Listener&#xff09;之一。 作用&#xff1a;它可把對資源&#xff08;Servlet、JSP、Html&#xff09;的請求攔截下來從而實現一些特殊功能 過濾器一般完成…

【QT中實現攝像頭播放、以及視頻錄制】

學習分享 1、效果圖2、camerathread.h3、camerathread.cpp4、mainwindow.h5、mainwindow.cpp6、main.cpp 1、效果圖 2、camerathread.h #ifndef CAMERATHREAD_H #define CAMERATHREAD_H#include <QObject> #include <QThread> #include <QDebug> #include &…