C预处理 | pragma详解

欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。
预处理pragma
- 1. 预处理指令
- 2. #pragma详细用法
专栏:《精通C语言》
1. 预处理指令
ANSI标准定义的C语言预处理指令
| 预处理指令 | 含义 |
|---|---|
| #define | 宏定义,在预处理阶段进行文本替换。 |
| #undef | 撤销已定义的宏 |
| #include | 引入其他源文件 |
| #if #else #elif #endif | #if 的一般含义是如果#if 后面的常量表达式为true,则编译它与#endif 之间的代码,否则跳过这些代码。命令#endif 标识一个#if 块的结束。#else命令的功能类似于C 语言中的else ,#else 建立另一选择分支(和# if 搭配)。#elif 命令意义与else if 相同,它形成一个if else-if语句,可进行多种编译选择分支。 |
| #ifdef #ifndef | 条件编译,#ifdef表示如果已经定义了某个宏,#ifndef表示如果没有定义某个宏。 |
| #line | 改变当前行数和文件名,在编译程序中预先定义的标识符,用法为#line number[“filename”]。 |
| #error | 编译程序时,如果遇到#error则产生一个编译错误的提示消息,并且会停止编译。 |
| #pragma | 指定编译器实现特定功能。比如,#pragma once表示只包含一次头文件,#pragma pack(1)指定字节对齐方式等等。 |
ANSI标准C定义的宏:
__LINE__ //正在编译的文件的行号
__FILE__ //正在编译的文件的名字
__DATA__ //表示编译时刻的日期字符串
__TIME__ //表示编译时刻的时间字符串
__STDC__ //判断该文件是不是定义成标准C程序
#include
#include提供文件包含的功能,在预处理阶段完成,它可以把多个源文件连接成一个源文件,实际上#include是宏替换的一种延伸。使用#include包含文件主要有两种方式,两种方式的区别在于搜索策略不同。
-
#include <path/filename>
在搜索时直接从编译器指定的路径进行搜索,如果找到文件,则把文件内容替换到#include语句处,如果找不到则报错。一般系统提供的头文件使用尖括号包含。
-
#include “path/filename”
在搜索时首先从运行程序所在的目录处搜索,如果搜索失败再从编译器指定的路径处搜索,如果仍然搜索失败则报错。用户自定义的头文件必须用双引号包含。
#运算符
#也可以看作一种预处理指令,用法如下
#include <stdio.h>
#include <stdlib.h>#define PRINT1(x) printf("square of x is %d\n", x * x)
#define PRINT2(x) printf("square of "#x" is %d\n", x * x)int main()
{PRINT1(3);PRINT2(3);return 0;
}
编译运行,可以看到输出结果如下
[mindtechnist@localhost test]$ ./test
square of x is 9
square of 3 is 9
##运算符
也叫做连接符,用法如下
#define xNum(n) x##n xNum(7) //展开后为 x7
2. #pragma详细用法
#pragma 指令用于设定编译器的状态或者是指示编译器完成一些特定的动作。常用参数如下:
#pragma message
在编译信息窗口输出相应信息,用法为
#pragma message("消息文本")
当编译器遇到这条指令,就会在编译输出窗口打印我们定义的消息文本,比如
#ifdef _X86
#pragma message("is _X86 ...")
#else
#pragma message("is _ARM ...")
#endif
#pragma code_seg
一般用于设置程序中函数代码存放的代码段,在开发驱动程序时使用较多。
#pragma code_seg(["section-name", ["section-class"]])
#pragma once
头文件只被编译一次。
#pragma hdrstop
表示预编译头文件到此为止,后面的文件不再进行预编译。
#pragma resource
#pragma resource "*.dfm"
表示把*.dfm文件中的资源加入项目。
#pragma warning
用法示例
#pragma warning(disable:4507 34) //不显示4507和34号警告信息
#pragma warning(once:4385) //4385号警告信息仅报告一次
#pragma warning(error:164) //把164号警告信息作为一个错误。
#pragma comment
该指令将一个注释记录放入一个对象文件或可执行文件中。常用lib参数,帮我们连入一个库文件。比如:
#pragma comment(lib, "user32.lib")
该指令用来将user32.lib 库文件加入到本工程中。
linker参数,将一个链接选项放入目标文件中,你可以使用这个指令来代替由命令行传入的或者在开发环境中设置的链接选项,你可以指定/include 选项来强制包含某个对象,例如:
#pragma comment(linker, "/include:__mySymbol")
#pragma pack
设置内存对齐方式。


相关文章:
C预处理 | pragma详解
欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…...
轻松搭建知识付费小程序:让知识传播更便捷
明理信息科技saas知识付费平台 在当今数字化时代,知识付费已经成为一种趋势,越来越多的人愿意为有价值的知识付费。然而,公共知识付费平台虽然内容丰富,但难以满足个人或企业个性化的需求和品牌打造。同时,开发和维护…...
沉浸式go-cache源码阅读!
大家好,我是豆小匠。 这期来阅读go-cache的源码,了解本地缓存的实现方式,同时掌握一些阅读源码的技巧~ 1. 源码获取 git clone https://github.com/patrickmn/go-cache.git用Goland打开可以看到真正实现功能的也就两个go文件,ca…...
伪协议和反序列化 [ZJCTF 2019]NiZhuanSiWei
打开题目 代码审计 第一层绕过 if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){ echo "<br><h1>".file_get_contents($text,r)."</h1></br>"; 要求我们get传参的text内容必须为w…...
性能优化之资源优化
性能优化之资源优化 资源优化性能关键检测流程。浅析一下基于Unity3D 美术规则约束一、模型层面二、贴图层面三、动画层面四、声音层面:(音频通用设置)五、UI层面: 题外点:诚然在优化中,美术占比是很重要的…...
ChatGPT免费 | 8个免费使用GPT-4的方法
这篇文章为寻找免费使用GPT-4技术的读者提供了一份实用的指南。 每个推荐的平台都包括了简要的描述和链接,方便读者直接访问。 以下是根据你提供的内容,稍作整理的文章结构: 1. HuggingFace 描述: 提供GPT-4等多种语言模型的平台。 如何使用:…...
解决Qt“报无法定位程序输入点xxx于动态连接库“问题
今天,在使用QtVS2019编译工程时,弹出"无法定位程序输入点xxx于动态链接库"问题,如图(1)所示: 图(1) 报"无法定位程序输入点xxx于动态链接库"问题 出现这种问题的原因有很多: (1) 工程Release/Deb…...
wpf-MVVM绑定时可能出现的内存泄漏问题
文章速览 引言错误示范示例1示例2 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ 引言 正确结构: Model <——> ViewModel <——> View 但很多时候,很容易出现…...
【飞凌 OK113i-C 全志T113-i开发板】一些有用的常用的命令测试
一些有用的常用的命令测试 一、系统信息查询 可以查询板子的内核信息、CPU处理器信息、环境变量等 二、CPU频率 从上面的系统信息查询到,这是一颗具有两个ARMv7结构A7内核的处理器,主频最高1.2GHz 可以通过命令查看当前支持的频率以及目前所使用主频 …...
基于iOS平台的车牌识别表情识别项目
基于iOS平台的车牌识别&&表情识别项目 简介 该项目客户端搭载于iOS平台,服务端搭载于阿里云服务器,主要功能是通过拍照或选取相册图片来进行车牌的识别以及人脸表情识别。本文便是对项目整体流程设计思路和具体实现做一个详细介绍。 整体实…...
Matlab仿真2ASK/OOK、2FSK、2PSK、QPSK、4QAM在加性高斯白噪声信道中的误码率与归一化信噪比的关系
本文为学习所用,严禁转载。 本文参考链接 https://zhuanlan.zhihu.com/p/667382398 QPSK代码及高斯白噪声如何产生 https://ww2.mathworks.cn/help/signal/ref/butter.html 滤波器 https://www.python100.com/html/4LEF79KQK398.html 低通滤波器 本实验使用matlab仿…...
九:爬虫-MongoDB基础
MongoDB介绍 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其…...
机器学习之实验过程01
import pandas as pd import numpy as np import matplotlib.pyplot as plt data_path /home/py/Work/labs/data/SD.csv # 请确保您的数据文件路径是正确的 df pd.read_csv(data_path) df.head() # 创建散点图 # 创建散点图 plt.figure(figsize(10, 6)) plt.scatter…...
【【迭代16次的CORDIC算法-verilog实现】】
迭代16次的CORDIC算法-verilog实现 -32位迭代16次verilog代码实现 CORDIC.v module cordic32#(parameter DATA_WIDTH 8d32 , // we set data widthparameter PIPELINE 5d16 // Optimize waveform)(input …...
IntelliJ IDEA 2023.3 安装教程
引言 IntelliJ IDEA,通常简称为 IDEA,是由 JetBrains 开发的一款强大的集成开发环境,专为提升开发者的生产力而设计。它支持多种编程语言,包括 Java、Kotlin、Scala 和其他 JVM 语言,同时也为前端开发和移动应用开发提…...
Go 错误处理
Go 错误处理 Go 语言通过内置的错误接口提供了非常简单的错误处理机制。 error类型是一个接口类型,这是它的定义: type error interface {Error() string }我们可以在编码中通过实现 error 接口类型来生成错误信息。 函数通常在最后的返回值中返回错误…...
HarmonyOS构建第一个ArkTS应用(Stage模型)
构建第一个ArkTS应用(Stage模型) 创建ArkTS工程 若首次打开DevEco Studio,请点击Create Project创建工程。如果已经打开了一个工程,请在菜单栏选择File > New > Create Project来创建一个新工程。 选择Application应用开发…...
故障排查利器-错误日志详解
目录 什么是错误日志 错误日志的作用 错误日志的内容 错误日志的格式 错误日志的生成方式 错误日志的解析和处理 错误日志的最佳实践 小结 错误日志是软件开发和运维中非常重要的一部分,记录了应用程序运行过程中发生的错误和异常信息,如错误类型…...
微信小程序(uniapp)api讲解
Uniapp是一个基于Vue.js的跨平台开发框架,可以同时开发微信小程序、H5、App等多个平台的应用。下面是Uniapp常用的API讲解: Vue.js的API Uniapp采用了Vue.js框架,因此可以直接使用Vue.js的API。例如:v-show、v-if、v-for、comput…...
overtureDNS使用介绍
Overture是一个定制的DNS中继服务器。 在此下在二进制版本 https://github.com/shawn1m/overture/releases默认配置文件./config.yml bindAddress: :53 debugHTTPAddress: 127.0.0.1:5555 dohEnabled: false primaryDNS:- name: DNSPodaddress: 119.29.29.29:53protocol: udp…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
