首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Eric Young的"crypto/conf/conf.h“中的双圆括号有什么用处?

在Eric Young的"crypto/conf/conf.h"中,双圆括号的用途是用来将宏定义中的参数进行括号扩展和参数替换。这种技术称为宏扩展(Macro Expansion)。

在C语言中,宏定义使用#define关键字进行定义,形式为#define 宏名(参数列表) 替换文本。当宏被调用时,预处理器会将宏调用处的参数进行替换,然后将替换后的文本插入到代码中。

双圆括号的作用是将宏调用的参数进行括号扩展。在C语言中,圆括号有多种作用,如改变表达式运算的优先级、表示函数调用等。在宏定义中,为了确保宏能正确地进行参数替换和避免意外的错误,通常会使用双圆括号将参数括起来。

具体来说,双圆括号在宏定义中起到以下作用:

  1. 避免优先级问题:使用双圆括号可以确保宏中的参数在宏扩展时不受上下文的影响,避免因运算优先级问题导致的错误。例如,对于宏定义#define SQUARE(x) (x)(x),如果不使用双圆括号,当调用SQUARE(3+2)时,宏扩展后的结果为3+23+2,而使用双圆括号的定义则可以确保宏扩展后的结果为(3+2)*(3+2)。
  2. 支持复杂参数:使用双圆括号可以支持宏的参数是表达式、带逗号的表达式以及其他复杂参数。例如,宏定义#define MAX(a, b) ((a) > (b) ? (a) : (b)),使用双圆括号可以确保宏扩展后的结果为((a) > (b) ? (a) : (b))。
  3. 提高可读性:使用双圆括号可以增加宏定义的可读性,明确地将参数括起来,使代码更易理解。

在云计算领域中,宏定义的使用相对较少,更多的是通过函数或类来实现相应功能。因此,在云计算领域中,双圆括号的使用不太常见。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

::before 和 :after冒号和单冒号 什么区别?解释一下这2个伪元素作用

冒号(::)和单冒号(:)都用于表示伪元素,但它们在语法上有一些区别。 冒号(::):在CSS3引入了冒号语法,用于表示伪元素。它是较新语法规范,建议在使用CSS3伪元素时使用冒号。...这种用法在CSS2被允许,但在CSS3不再推荐。 关于 ::before 和 ::after 伪元素作用: ::before 伪元素:用于在选定元素内容前插入一个生成内容。...总结:冒号(::)是较新语法规范,建议在使用CSS3伪元素时使用冒号,而单冒号(:)可以用于表示某些伪元素,但不再推荐使用。...常见单冒号(:)伪类哪些? 单冒号(:)用于表示 CSS 伪类,它们是一些用于选择特定状态或特定位置元素类别。以下是一些常见单冒号伪类: :hover:当鼠标悬停在元素上时应用样式。...:nth-of-type(n):选择父元素下同类型元素第 n 个元素。 :not(selector):选择不满足指定选择器元素。 :empty:选择没有子元素或者没有文本内容元素

66920
  • python3 列表 元组 字典 文件

    列表、元组操作 列表是我们最以后最常用数据类型之一,通过列表可以对数据实现最方便存储、修改等操作 定义列表 1 names = ['Alex',"Tenglan",'Eric'] 通过下标访问列表元素...s交集   c = t – s          # 求差集(项在t,但不在s)   d = t ^ s          # 对称差集(项在t或s,但不会同时出现在二者)   基本操作:...(t)   s <= t   测试是否 s 每一个元素都在 t   s.issuperset(t)   s >= t   测试是否 t 每一个元素都在 s   s.union(t...I was young 昨日当我年少轻狂 So many lovely songs were waiting to be sung 那么多甜美的曲儿等我歌唱 So many wild pleasures...all 除了和我相关 什么都记不得了 The game of love I played with arrogance and pride 我用自负和傲慢玩着爱情游戏 And every flame

    89410

    8行代码实现ui文件到py文件转换

    将.ui转换为.py一般是通过命令行,如果电脑上安装了Eric 6,也可以用Eric转换,但最通用还是命令行方法。...其语法为 但是,当大量ui文件时,最好能用一个脚本进行处理,省时省力还不容易出错,用老司机的话这就叫DRY原则(Don't repeat yourself)。...程序代码如下: 通过命令 查看文件夹里哪些文件。 运行前,文件夹里四个文件,如下。 运行完毕后,文件夹里每个.ui文件都出现了一个.py文件,如下所示。...表示赋给path变量是字符串字面值(String literals),即看见什么就表示什么,比如反斜杠 只是反斜杠而已,不会起转义作用(众所周知,python里反斜杠是个转义字符,比如 表示换行,行尾...只要把列表表达式方括号换成圆括号即可,比如 。但是在程序代码里当我用生成器时,只产生了 ,问题有待查明。

    81180

    Python基础4

    列表、元组操作 列表是我们最以后最常用数据类型之一,通过列表可以对数据实现最方便存储、修改等操作 定义列表 names = ['Alex',"Tenglan",'Eric'] 通过下标访问列表元素...# t 和 s交集 c = t – s # 求差集(项在t,但不在s) d = t ^ s # 对称差集(项在t或s,但不会同时出现在二者...= t 测试是否 t 每一个元素都在 s s.union(t) s | t 返回一个新 set 包含 s 和 t 每一个元素 s.intersection(...I was young 昨日当我年少轻狂 So many lovely songs were waiting to be sung 那么多甜美的曲儿等我歌唱 So many wild pleasures...all 除了和我相关 什么都记不得了 The game of love I played with arrogance and pride 我用自负和傲慢玩着爱情游戏 And every flame

    53530

    访问者模式--年轻人和中年人代沟

    引子 小帅25岁,老王35岁,一天小帅和老王讨论起了现在年轻和中年人之间差异越来越明显问题。 小帅列出了几种情景,同时小帅作为年轻人代表,老王作为中年人代表分别作出了回答。...老王看罢,说道:写得不错,不过还有些问题,如果我要再增加几个问题场景,比如:平时看什么书、喜欢什么运动、晚上几点睡之类问题怎么办呢?...老王笑道:怎么不可能,个设计模式就是干这个。 访问者模式 访问者模式:提供一个作用于某种对象结构各元素操作,可以在不改变元素类前提下,定义作用于元素新操作。...第二、在accept方法传入了this对象,具体元素对象(Young)也确定了,这样两个对象就都确定了。...由于Java语言只支持单分派,所以要用访问者模式实现分派,这就是为什么在ConcreteVisitor类要用ConcreteElement实现类,而不能用Element接口。

    31120

    python学习总结

    读一下像ESR这样超级电脑高手谈Python的话,你会感到十分有意思: ● Eric S....你可以在三引号自由使用单引号和 引号。 3、逻辑行与物理行 物理行是你在编写程序时所 看见 。逻辑行是Python 看见单个语句。Python假定每个物理行对应一个 逻辑行 。...一个空元组由一对空圆括号组成,如myempty = ()。然而,含有单个元素元组就不那么简单了。...你必须在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组和表达式中一个带圆括号对象。即如果你想要是一个包含项目2元组时候,你应该指明singleton = (2 , )。...只有一个例外:如果你使用数据成员名称以 下划线前缀 比如__privatevar,Python名称管理体系会有效地把它作为私有变量。

    1K50

    LRU链表管理(2)—Buffer Pool(五十五)

    前面说了buffer pool重要性,每次查询数据并不是I/O从磁盘获取,而是吧磁盘上数据刷新到buffer pool里,里面组成缓存页和控制块,缓存页可以用innoDB_buffer_pool_size...如果修改了缓存页,导致和磁盘上数据不一致脏数据,所以这时候flush就有 用处了,每次隔一段时间吧flush 链表数据更新到磁盘上,并不是吧所有buffer pool数据更新上。...预读又细分两种: 线性预读:mysql提供了一个系统变量innodb_read_ahead_threshold,他默认值是56,如果顺序访问某个区超过了这个系统变量值,就会触发一次异步读取下一个区全部页面到缓存页...情况二:有的情况可能没有建立索引,而写一些全表扫描查询语句,这时候数据量太多,每次查询都给缓存页换一次血,每次都淘汰数据,再从磁盘I/O刷新数据出来,显然和直接访问磁盘没什么区别。...那我们吧lru链表分成两半,那什么是yong区域数据,什么是old区域数据呢,随着程序运行,这些数据都可能发生变化,那截取比例怎么看呢, mysql> show variables like 'innodb_old_blocks_pct

    25710

    Python学习,字符串格式化方法不止%和farmat,还有f-string

    它是由PEP 498 所带来全新一种方法,全称是“Literal String Interpolation”。 ? 百科资料,小水一下!接下来给大家分享一下,它使用方法及注意事项。 ?...只要确保在表达式中使用f-字符串外部没有使用相同类型引号即可 比如:f"{'Eric Idle'}" 尤其在使用字典时候,一定要确保字典键值所用引号与f-字符串外部使用不一致!...刚才说引号时候,一种情况,其实也是可以,就是转义,比如下图例子 ? 但是要注意,不能将反斜杠用于表达式内部用于转义 ? 如果lambda表达式用在f-string内部的话,请用圆括号 ? ?...这是因为在lambda表达式冒号:会被错误解读为表达式结束,而出现一些问题 ? 最后 旧格式化字符串功能依然可以使用,但是我们在使用f字符串时,可以明显感觉到它高效、便捷和易读性!...那么为什么不使用呢?如果你使用版本是3.6及以上版本,那么快来使用它吧!

    64820

    开发 | 数据咨询师经验之谈:90% 公司并不需要机器学习

    Eric Brown Eric Brown:数据科学家要用数据说话。从数据上来看:你,和你公司,并不需要机器学习。 我是认真的。 或许你不同意,那么听我解释。...“一个优秀计算机专家会说:大多数公司以为他们需要先进 AI、ML 技术,其实,他们真的只需要在干净数据上做线性回归。” 这句话,“干净数据“是重点。...大多数公司并不知道数据管理是什么 ? 我并不是一个数据管理、数据质量方面的专家导师。但我对这个领域一定了解——足够让我清楚不合格、不到位数据管理是什么样。况且我经常遇到这些情况。...在我与公司客户合作、帮助他们开展新数据项目的工作经历(到现在已经变成了主要是讨论 ML 和深度学习),我问客户第一个问题永远是:“告诉我你数据管理流程”。...没什么能阻挡你一直跋涉到 ML 和 DL 深水区。毕竟机器学习用处和舞台。只是记住:在充分了解你数据,搞明白“经典”方法能为你要解决难题做到哪一步之前,不要一股脑儿地栽进机器学习。

    675140

    工作总结之因为笛卡尔积问题写SQL搞了半天(附笛卡尔积总结)

    解决过程 尝试过左连接,右连接及内连接等等,发现数据始终比实际数据多出很多,查阅资料判断是产生了笛卡尔积,下文详细笛卡尔积解释 根据指引选择where 进行多条件限制仍然不行????。...所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里一个概念,表示两个表每一行数据任意组合,上图中两个表连接即为笛卡尔积(交叉连接) 在实际应用,笛卡尔积本身大多没有什么实际用处,只有在两个表连接时加上限制条件...ClassID大于StudentClassID子集: 虽然上面连接后表并没有什么实际意义,但这里仅仅作为DEMO使用:-) 关系演算 上面笛卡尔积概念是关系代数概念,而我在前一篇文章中提到还有关系演算查询方法....我在学生添加一个名为Eric学生,但出于某种原因忘了填写它班级ID: 当我想执行这样一条查询:给我取得所有学生姓名和他们所属班级: SELECT s.StudentName,c.ClassName...[Student] 结果可以如图表示: 总结 文中对SQL各种连接查询方式都做了简单介绍,并利用一些Demo实际探讨各种连接用处,掌握好各种连接原理是写好SQL查询所必不可少

    1.5K10

    JavaScript关于null一切

    作者:Dmitri Pavluti 译者:前端小智 来源:dmitripavlutin 本文已经过作者@Dmitri Pavluti授权翻译 JavaScript2种类型:基本类型(string, booleans...let myObject = null 在本文中,我们将了解到有关JavaScriptnull所有知识:它含义,如何检测它,null与undefined之间区别以及为什么使用null造成代码维护困难...有趣是,type null结果是什么 typeof null; // => 'object' 为什么是'object',typoef null为object是早期 JS 实现一个错误。...严格相等运算符===区分null和undefined : null === undefined // => false 而等运算符==则认为null和undefined 相等 null == undefined...总结 null是JavaScript一个特殊值,表示丢失对象,严格相等运算符确定变量是否为空:variable === null。

    1.3K10

    用了很多年 CMS 垃圾收集器,终于换成了 G1,真香!!

    作者:Eric Fu 链接:https://ericfu.me/g1-garbage-collector/ 在过去很长一段时间内,HotSpot JVM 首选垃圾收集器都是 ParNew + CMS...但是这已经足够了:当我们需要确定当前 Region 哪些对象存在外部引用时(这些对象是可达,不能被回收),只要扫描一下这块 Card 所有对象即可,这比扫描所有 live objects 要容易多...各个 Region Generation 是随着 GC 进行而不断变化,甚至各个代多少 Region 这个比例也是随时调整。...Young GC 只会涉及到 Young Regions,它将 Eden Region 存活对象移动到一个或多个新分配 Survivor Region,之前 Eden Region 就被归还到...对于 Young Regions,我们对它有以下特殊优化: Evacuation 时候,Young Regions 一定会被放到待收集 Regions 集合(Collection Set),原因很简单

    99450

    领域驱动设计发展史

    引言 领域驱动设计(Domain-Driven Design,简称DDD)是软件开发领域一种设计思想,由埃里克·埃文斯(Eric Evans)在他著作《领域驱动设计:软件核心复杂性应对之策》(Domain-Driven...这种设计思想重视将实际业务问题映射到软件设计,以解决复杂业务场景带来软件开发问题。下面让我们来探索领域驱动设计发展历史。...领域驱动设计提出 在2003年,Eric Evans发表了他这本具有里程碑意义著作,将领域驱动设计概念引入到了软件开发领域。...2007年,Greg Young提出了CQRS(Command Query Responsibility Segregation)架构,将DDD概念引入了架构设计,使得DDD可以更好地处理大型和复杂系统...同时,越来越多框架和工具支持DDD实践,如JavaSpring Data和JHipster,PythonDjango,RubyRails,甚至是JavascriptNestJS等。

    62311

    Mimikatz 用法详解

    进入标准模块,不过标准模块并没有特别多用处 privilege privilege::debug 提升为debug权限 privilege::id 20 调整id来调整权限,debug 是20,driver...中有各种各样加密,这个参数可以查看提供者 一般 CryptoAPI和 CNG 两种,其重CNG较为古老 ?...crypto::stores 证书存储,windows 系统中有很多证书存储,默认是CURRENT_USER 这个证书存储 这个命令可以查看这些证书存储下都有什么 如果我们想指定某个证书存储(以local_machine...为例) crypto::stores /systemstore:local_machine crypto::certificates 查看子存储哪些证书 默认Current_USER 可以使用 crypto...,比如他在打开哪些文件 event 关于日志操作,比如清空安全日志所有日志 日志信息很多,其中比较重要是安全日志,其中包含xx在xx时间登录了 event:clear 清空安全日志 event

    4K30

    VS Code+Anaconda打造舒适Python环境

    但是始终没能解决代码补全问题,我说代码补全不仅是指Python内置函数补全,还必须能补全扩展模块里面的函数。本次就这些问题写一下自己解决方案,希望能帮助大家。...如果你更好建议或者意见欢迎联系我,或者在文末留言!!! 找到如图,然后点击进入 然后进入这个: 下载对应版本就行了。下载以后,一路安装就行。...VS Code安装 百度去官网下载安装就行,没有什么特殊要求,安装最新就行。 配置 点击安装,安装以后,重新加载一下。...配置时候搜索上图中右侧python.pythonPath【在最上面搜索】 搜索出来以后就把它复制到右边,然后填上你Python路径,在上图我还配置了光标,这个你可以不用配置,自己习惯用哪个样式光标自己可以选择...最后:结果【自动补全】 参考资料: 1.python之VSCode安装 - Eric_Young - 博客园 2.VSCode调试配置 - AnswerCard - 博客园 3.https://marketplace.visualstudio.com

    2K80

    vim 之中 U 命令浅析

    今天看 vim帮助文档 user-manual 第二章,发现了还有U(大写)这个命令,于是反复实验,略微搞懂了一点它用处,特地拿来和大家分享一下!...按下U键之后,按下U键之后,U把缓存内容还原出来,并且把当前内容存到缓存里面!...举个例子,首先说每次只针对一行,比如说我一个文件如下(这个句子到底要表达个啥,我也不明白, vim user-manual 就是给出了个这句子!)...: 然后,我用v+d键首先删除第二行 Found,然后再删除第一行 A young。...编辑完之后,我按下U键,自然就是还原第一行缓存了!如果我此时再按下U键,又会发生什么情况呢?如下: 为什么会变成这样呢?

    1K10

    开源图书《Python完全自学教程》8.2简单

    名称后面紧跟着是英文半角状态下冒号 “ : ”。注意,与定义函数不同,这里没有圆括号。在8.5节会介绍什么时候用到圆括号。...以类 SuperMan 方法 nine_negative_kungfu() 为例,其参数特别的要求,第一个参数必须是 self ,而且它必须要有——至少要有一个名为self 参数。...注释(6)所定义是一个普通方法(相对“特殊方法”而言“普通”,名称命名上不用下划线开头和结尾),除了参数列表 self 参数前述规定和惯例之外,其他方面与第7章学过函数没有差别。...注意,后面的圆括号要有参数。...但是要注意参数,在类 SuperMan ,每个方法第一参数是 self ,通过实例调用方法时候,不需要在圆括号为 self 提供对象引用,这是因为 Python 解释器以“隐式传递”方式向 self

    23020
    领券