Pragma是什么?

sqlite3学习之PRAGMA 命令的使用 SQLite 的 PRAGMA 命令是一个特殊的命令,可以用在 SQLite 环境内控制各种环境变量和状态标志。一个 PRAGMA 值可以被读取,也可以根据需求进行设置,如果我们要查询当前的 PRAGMA 值,只需要提供该 pragma 的名字,如下: PRAGMA pragma_name; 为 PRAGMA 设置一个新的值,语法如下: PRAGMA pragma_name = valu... 阅读详情
Pragma是什么?
Pragma是什么?
翻译:SkyJacker
后附英文原文。


(译者注:
一句话,pragma就是为了让编译器编译出的C或C++程序与机器硬件和操作系统保持完全兼容而定义的宏扩展,
#pragma是和特定编译器相关的。)
两部分:
1.Pragma说明;
2.Pragma的语法。

一、Pragma说明(Directives)

C和C++程序的每次执行都支持其所在的主机或操作系统所具有的一些独特的特点。
一些程序,例如,需要精确控制数据存放的内存区域或控制某个函数接收的参数。
#pragma指示为编译器提供了一种在不同机器和操作系统上编译以保持C和C++完全兼容的方法。?
Pragmas是由机器和相关的操作系统定义的,通常对每个编译器来说是不同的。


二、语法(Syntax)

#pragma token-string(特征字符串)

特征字符串是一连串的字符,就是要给一个特定编译器提供说明和编译意见。

符号(#)必须是pragma所在那一行的第一个非空格字符;
#号和pragma之间可以有任意个空格符。
在#pragma之后,是可以被编译器解析的预处理特征字符。
一般认为,#pragma属于宏扩展。
如果编译器发现不认识的pragma,会提出警告,但继续编译下去。

Pragmas可以用在条件声明上,提供最新的功能性的预处理程序,或者提供给编译器定义执行的信息。
C和C++编译器认可如下pragmas:
alloc_text
comment //注释
init_seg1 
optimize  //最优化
auto_inline
component  //组成部件
inline_depth
pack       //包
bss_seg
data_seg
inline_recursion  //内嵌递归
pointers_to_members1
check_stack
function   
intrinsic  //内在的
setlocale
code_seg
hdrstop
message 
vtordisp1
const_seg
include_alias
once
warning


这是MSDN的一篇文章,原作者曾经想使用
#pragma pack(1) // 用GCC在MIPS平台上将结构体成员结合到一块连续的内存块,但是没有做到。

在linux环境下使用intel-based GCC,#pragma pack(1)可以工作。

建议参考具体编译器的文档,在里面应该有pragma的说明。

---------------------------------------原文-------------------------------------------

Pragma Directives
Each implementation of C and C++ supports some features unique to its host machine or operating system.

Some programs, for instance, need to exercise precise control over the memory areas where data is placed or

to control the way certain functions receive parameters.
The #pragma directives offer a way for each compiler
to offer machine- and operating-system-specific features
while retaining overall compatibility with the C and C++
languages. Pragmas are machine- or operating-system-specific by definition,
and are usually different for every compiler.

Syntax

#pragma token-string

The token-string is a series of characters that gives a specific compiler instruction and arguments,
if any.

The number sign (#) must be the first non-white-space character on the line containing the pragma;

white-space characters can separate the number sign and the word pragma.
Following #pragma, write any text that the translator can parse as preprocessing tokens.
The argument to #pragma is subject to macro expansion.

If the compiler finds a pragma it does not recognize, it issues a warning, but compilation continues.

Pragmas can be used in conditional statements, to provide new preprocessor functionality,
or to provide implementation-defined information to the compiler.
The C and C++ compilers recognize the following pragmas:

alloc_text comment init_seg1 optimize
auto_inline component inline_depth pack
bss_seg data_seg inline_recursion pointers_to_members1
check_stack function intrinsic setlocale
code_seg hdrstop message vtordisp1
const_seg include_alias once warning


This is an article from MSDN, I ever wanted to use
#pragma pack(1) //which can combine structure members to one continuous memory block
on MIPS platform using GCC, but it doesn't work.


See the compiler's document, it should be illustrated there.

Under linux env using intel-based GCC, it works.
为天下谷,常德乃足,复归于朴,写给 SAP RAP 开发者的一篇工程札记 摘要 在SAP ABAP RAP开发中,业务逻辑不应堆砌在单一方法中,而应遵循"为天下谷"的哲学,将模型、行为和服务分层设计,确保系统稳定且可扩展。RAP的核心在于通过CDS定义业务对象的结构(如采购申请的root/child entity),并通过行为定义(validation、determination等)封装业务规则,避免代码分散在高耦合的实现中。示例展示了审批逻辑的分层处理(如状态校验与提交动作分离),强调RAP框架提供的并发控制、草稿模式等企业级能力应合理运用,使业务对象成为"低处容纳水流"的稳定 阅读详情

相关推荐

MaxEnt运行报错的各种问题及解决方法

由于我使用的环境数据并不是大部分人常用的worldclim上下载的气候数据,而是使用不同的四类环境数据,分别包括:降雨数据、气温数据、氮沉降数据和大气CO2浓度数据,数据需要分别从不同的网站下载,因此并不能得到非常一致的数据文件,导致MaxEnt运行时出现了各种各样的错误。文件终于能够读取了,然而计算到一半又弹出第三种问题,根据弹出的报错提示,找到错误所在那一行,用Notepad++打开,可以发现,这一行确实存在nan值,导致文件读取无法正常进行。出现上图所述的问题时,检查环境变量是否具有相同的行列号。

guye322的博客 1万+

SQLite的PRAGMA 声明(二十三)

SQLite拥有别人无法比拟的装机量,究竟什么成就了SQLite呢,本文将SQLite的历史版本记录粗列一下,供各位朋友参详如何做一个高质量的程序的引文。SQLite拥有超过225个API,本系列文章将深入介绍 SQLite C/C++ 数据库接口的基础知识,包括如何连接和打开 SQLite 数据库、执行查询和事务管理、提取查询结果集等等,帮助开发者更好地了解和使用 SQLite 数据库接口。

1910

高速窄脉冲峰值保持设计

一、目的 在激光探测领域,探测器发出的高速窄脉冲,单片机AD进行采样,很难捕捉到窄脉冲的幅值,即使使用高速AD进行采样,也存在一定的难度。因此,本方案设计了一种高速窄脉冲峰值保持电路,有助于单片机AD采样能很好的捕捉到脉冲幅值。 二、方案分析与比较 峰值保持器一般分为两种:电压型和跨导型。 方案一:电压型峰值保持器,由电压型运放、二极管、保持电容、缓冲器组成,优点是元件成本低,缺点是峰值保持存在过...

weixin_43184208的博客 9292

C语言之pragma用法详解

例如: #pragma warning( push ) #pragma warning( disable : 4705 ) #pragma warning( disable : 4706 ) #pragma warning( disable : 4707 ) //....... #pragma warning( pop ) 在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。因为DLL中的全局数据对于每一个调用他的进程而言,是私有的,不能共享的。*.dfm中包括窗体外观的定义。

qq_62199813的博客 6368

SVG文件上传漏洞实战:从XSS攻击到防御策略

本文深入剖析了SVG文件上传漏洞的成因与危害,揭示了攻击者如何利用SVG的XML本质构造恶意文件,绕过常规检查实现存储型XSS攻击。文章通过实战复现演示了完整的攻击链,并提供了从严格内容检查、安全解析过滤到设置CSP策略等多层次的纵深防御方案,帮助开发者从根本上加固文件上传功能。

weixin_29230805的博客 395

(论文速读)PTV3: 更简单、更快速、更强大的3D点云处理新突破

该论文提出PointTransformerV3(PTv3),通过简化设计实现3D点云处理的效率突破。该研究摒弃复杂注意力机制,转而采用点云序列化和补丁注意力等高效方法,将感受野从16点扩展到1024点,在保持高精度的同时实现3倍速度提升和10倍内存优化。PTv3在超过20个室内外场景任务中取得SOTA结果,ScanNet语义分割达79.4%mIoU,Waymo检测提升3.3%APH。核心创新包括四种空间填充曲线序列化模式和xCPE位置编码,为3D感知的工业应用提供了高效解决方案。

LJ1147517021的博客 1376

#pragma的常用方法讲解

概述 我们在写代码时,总会遇到头文件多次包含的情况,刚开始时我们使用宏定义进行控制,之后发现有#pragma once这样简单的东西,当时是很兴奋,以为#pragma就这一种用法。唉~,现在想想当时还是年轻啊,不过还是年轻好啊。 1、什么是预处理 预处理是将源文件的文本作为翻译的第一阶段操作的文本处理步骤。 预处理不会分析源文本,但会为了查找宏调用而将源文本细分为标记。 主要包括了下面三个方面: ...

weixin_39640298的博客 6万+

【多模态大模型】GLIP:零样本目标检测新范式与视觉语言理解

本文深入解析了多模态大模型GLIP在零样本目标检测和视觉语言理解领域的创新应用。GLIP通过统一目标检测与自然语言理解任务,实现了零样本学习能力,能够精准定位复杂文本描述对应的图像区域。文章详细介绍了GLIP的核心技术、数据策略及实战表现,并对比了与其他多模态模型的差异,为AI视觉理解提供了新范式。

weixin_29186249的博客 263

C预处理 | pragma详解

C语言预处理讲解,以及#pragma的详细用法。

仅以此博客记录日常学习工作中所思所得,水平有限,难登大雅,万望海涵。 3484

树莓派4B系统安装及SSH远程控制(简单易操作)

​自从2022年4月树莓派官网更新了RaspberryPiImager版本v1.7.2后,便不再支持自行建立ssh文件,并用默认用户名pi和密码raspberry的方式进行远程控制(亲测不行,输密码时一直access denied)。但是该版本软件提供了烧录系统前设置ssh用户及密码功能。本文记录了系统安装和SSH远程操作步骤。........................

机械人的代码路 5790

Multisim14.3中FPGA接口电路设计:原理图项目应用

深入讲解在multisim14.3环境下构建FPGA接口电路的方法,结合原理图设计与项目实践,展现multisim14.3强大的电路仿真能力,提升数字系统开发效率。

weixin_42578963的博客 1157

C语言中的#pragma预处理指令

pragma用于指示编译器完成一些特定的动作#pragma所定义的很多指示字是编译器特有的(后面的参数决定)#pragma在不同的编译器间是不可移植的预处理器将忽略它不认识的#pragma指令不同编译器可能以不同的方式解释同一条 #pragma指令。

千月星跡 3339

向量数据库:PGVector

PGVector 是一个基于 PostgreSQL 的扩展插件,为用户提供了一套强大的向量存储和查询的功能

m0_37559973的博客 1万+

SQLite语法 PRAGMA

SQLite支持的编译指令(pragma)PRAGMA命令是用于修改SQlite库或查询SQLite库内部数据(non-table)的特殊命令。PRAGMA 命令使用与其它SQLite命令(e.g. SELECT, INSERT)相同的接口,但在如下重要方面与其它命令不同: 在未来的SQLite版本中部分pragma可能被删除或添加,小心使用。 当使用未知的pr

robin622的专栏 2787

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

oracle 里面pragma,PRAGMA oracle

PRAGMA是一个编译指示(或命令)。=====编译指示在编译时被处理,它们不在运行时执行=====编译指示是对编译程序发出的特殊指令。=====它也称为伪指令(pseudoinstruction),不会改变程序的含义。=====它只是向编译程序传递信息 ,实际上它是非常类似于嵌在 SQL 语句的注释中的性能调整提示。==========EXCEPTION_INIT将一个特定的错误号与程序中所声明...

weixin_34514218的博客 995

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

sqlite3 PRAGMA 翻译

sqlite3 PRAGMA

1227

oracle 里面pragma,在Oracle Package Body中使用Pragma

我想创建一个Oracle Package和两个函数:一个公共函数(function_public)和一个私有函数(function_private). public函数在sql语句中使用私有函数.没有编译指示代码不编译(PLS-00231:函数’FUNCTION_PRIVATE’可能不在SQL中使用)CREATE OR REPLACE PACKAGE PRAGMA_TEST ASFUNCTION ...

weixin_36139240的博客 415

oracle中关键字pragma解释

PRAGMA是一个编译指示(或命令)。 ====== 编译指示在编译时被处理,它们不在运行时执行 ===== 编译指示是对编译程序发出的特殊指令。 ===== 它也称为伪指令(pseudoinstruction),不会改变程序的含义。 ===== 它只是向编译程序传递信息 ,实际上它是非常类似于嵌在 SQL 语句的注释中的性能调整提示。 ========== EXCEPTION

cuiyan1982的专栏 3110

#pragma与_Pragma的区别

在使用TI编译器编译代码过程中发现#pragma与_Pragma的区别,下面是TI Wiki的简单归纳: Pragmas You Can Understand Contents  [hide]  1 Introduction2 Full Example3 Discussion Introduction This art

linpeng1577的专栏 2864

SQLite中的PRAGMA语句攻略

sqlite

Fybon的专栏 4234

sqlite3中的一些PRAGMA语句

1.问题原由 需要修改sqlite的一些配置和数据库操作,eg.查询THREADSAFE等编译选项。但是用的qt封装的QSqlDatabase类。无法执行sqlite源码中的一些原生函数。后面发现可以通过执行PRAGMA的一些语句来达到目的。 2.参考资料和使用方法 最一手的资料当然是官方的资料 https://www.sqlite.org/pragma.html 3.使用示例,以Qt为例 QSqlQuery q(QSqlDatabase::database("db"...

lsfreeing的专栏 1095

oracle 里面pragma,oracle中关键字pragma解释

PRAGMA是一个编译指示(或命令)。======编译指示在编译时被处理,它们不在运行时执行=====编译指示是对编译程序发出的特殊指令。=====它也称为伪指令(pseudoinstruction),不会改变程序的含义。=====它只是向编译程序传递信息 ,实际上它是非常类似于嵌在 SQL 语句的注释中的性能调整提示。==========EXCEPTION_INIT将一个特定的错误号与程序中所声...

weixin_42501298的博客 554

SQLite 支持的编译指令 (PRAGMA)

SQLite 的 PRAGMA 指令为开发者提供了强大的工具,用于控制数据库行为和配置选项。通过合理使用这些指令,可以优化数据库性能,增强数据完整性以及满足特定应用需求。本文介绍的 PRAGMA 指令包括常用的配置选项、完整性检查、版本控制等,帮助读者理解其功能及适用场景。在实际开发中,开发者应根据应用需求选择合适的 PRAGMA 指令,优化数据库性能,并确保数据的完整性和一致性。希望本文能够为读者在 SQLite 数据库管理中提供有价值的指导,使其更高效地利用 SQLite 的各种特性。

My_wife_QBL的博客 2383
上一篇: 驱动开发起步
下一篇: VC Studio 使用技巧大全
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值