具有常量(真)值的条件运算符?

2024-04-14

我正在查看 OpenSSL 中使用的一些预处理器宏,我发现了以下内容crypto/stack/safestack.h:

#define CHECKED_STACK_OF(type, p) \
    ((_STACK*) (1 ? p : (STACK_OF(type)*)0))

#define CHECKED_SK_FREE_FUNC(type, p) \
    ((void (*)(void *)) ((1 ? p : (void (*)(type *))0)))

#define CHECKED_SK_FREE_FUNC2(type, p) \
    ((void (*)(void *)) ((1 ? p : (void (*)(type))0)))

我猜它是以这种方式编写的,是为了解决编译器错误(可能是供应商十多年来一直没有支持的古老东西)。

使用的目的是什么1上面因为它总是正确的?


它是双重检查是否传递了正确类型的代码。传递了指针 p,并且还必须在宏中手动键入该指针的类型。

三元表达式将始终返回第二个操作数,但将检查第二个和第三个操作数是否类型匹配,如果不匹配,您将收到编译器错误。

一个简单的例子:

int* p = NULL ;

1 ? p : ( float* )p ;    //error

1 ? p : ( int* )p ;      //ok
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有常量(真)值的条件运算符? 的相关文章

  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 重载<<的返回值

    include
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 快速设置我的条形图的水平滚动

    我正在使用 Daniel Cohen Gindi 的图表框架 它很棒 但是 我希望我的条形图水平滚动以查看其他数据 我尝试添加滚动视图 但没有成功 我也尝试了不同的值 例如 barChart setVisibleXRangeMaximum
  • 捕获 Exception 类而不是 Exception 子类是不好的做法吗?

    我有一个抛出 Exception 子类的方法 如果我对 Exception 的每个子类执行相同的捕获功能 那么仅捕获 Exceptions 类是不好的做法 还是应该单独捕获每个异常 是的 这是不好的做法 因为它使 catch 块捕获不应该捕
  • 在silverlight中获取xml中的所有节点名称

    我创建了一个这样的xml
  • 带有 CoordinatorLayout 的 Snackbar 禁用关闭

    我正在使用支持 浮动操作按钮 Snackbar 协调器布局 我需要协调器布局这样如果SnackBar显示的是浮动操作按钮向上移动以为 Snackbar 腾出空间 为了更好地理解 请检查此video http material design
  • JSF 表格和德语变音符号

    我在我的一个 JSF 这是一个 Facelet 中遇到了一个奇怪的问题 我正在使用 Richfaces 在一页上我得到了一个普通表单
  • Application.Current.Shutdown() 不会终止我的应用程序

    我刚刚启动了一个新的 C WPF 应用程序 并使用了来自WPF Contrib 项目 http wpfcontrib codeplex com 我可以启动程序 将 退出 菜单项添加到 NotifyIcon 的 ContextMenu 然后将
  • 反 CSRF cookie?

    我正在构建一个大量使用ajax 的应用程序 大多数反 CSRF 解决方案都围绕将一些信息放入视图状态并在发布时处理该数据 但是 我无权访问 ajax 调用中的视图状态 我计划生成一个 GUID 以在 cookie 和会话状态中插入令牌 使
  • 在 Swift 中创建“forCount”控制结构

    在许多项目中 这种控制结构非常适合可读性 forCount 40 this block is run 40 times 你可以做正是如此 https stackoverflow com a 4844280 294884在 Objective
  • 获取当前脚本的路径

    我想以编程方式将工作目录设置为当前脚本的路径 但首先我需要获取当前脚本的路径 所以我希望能够做到 current path retrieve the path of current script setwd current path Jus
  • 如何在 python 中 POST xml 元素

    基本上我有这个 xml 元素 xml etree ElementTree 我想将其 POST 到 url 目前我正在做类似的事情 xml string xml etree ElementTree tostring my element da
  • 如何实时更新RecyclerView?

    我有一个列表 任何用户都可以随时更新 该列表显示在回收视图 我想实时更新这个列表 以便用户可以获得更好的用户体验 因为用户不需要多次执行刷新 现在的问题是 如何实时更新这个列表 使用 RecyclerView 您可以更新单个项目 项目范围或
  • 使用 UIManagedDocument 在 ios5 中预加载核心数据数据库

    我正在尝试在我的应用程序中包含预加载的核心数据数据库 我正在使用这里给出的解决方案query https stackoverflow com questions 8683892 pre load core data database in
  • 具有相同成员类型的 C 结构是否保证在内存中具有相同的布局?

    本质上 如果我有 typedef struct int x int y A typedef struct int h int k B 我有A a C 标准是否保证 B a gt k是相同的a y 具有相同成员类型的 C 结构是否保证在内存中
  • Maven - 抑制 [警告] JAR 将为空 - 没有内容被标记为包含在 pom.xml 中

    我的maven项目故意地只需要src test java and src test resources 移除后src main 文件夹中 预期的警告出现在mvn verify WARNING JAR will be empty no con
  • AttributeError:__enter__ 使用 with 语句 SqlAlchemy 会话

    我明白了AttributeError enter 当我尝试像这样使用 SQLAlchemy 会话时guide http docs sqlalchemy org en latest orm session basics html My cod
  • 有效地查找文本文件中的最后一行[重复]

    这个问题在这里已经有答案了 我需要从许多非常大 几百兆字节 的文本文件中提取最后一行来获取某些数据 目前 我正在使用 python 循环遍历所有行 直到文件为空 然后处理返回的最后一行 但我确信有一种更有效的方法来执行此操作 使用 pyth
  • VBA Excel 简单错误处理

    我尽可能多地上网查看 除了微软支持网站 该网站由于某种原因在工作中被屏蔽 我试图简单地跳过一个错误 我在这里编写的代码经过简化 但应该以相同的方式工作 我的代码应该做什么 我的一名潜艇在循环中创建形状并命名它们 btn 1 btn 2 等
  • 无法在VS2010中调试.NET框架代码

    我正在尝试使用公共可用符号调试 NET 代码 我按照说明设置 在 工具 gt 选项 gt 调试 中 我选中了 启用 NET框架源代码步进 禁用了 仅启用我的代码 在 工具 gt 选项 gt 调试 gt 符号 中加载所有符号 我检查了这个文件
  • 图像特定区域的可点击链接

    我有一张地图图像 它在地图上有特定的区域名称 但它只是一个 PNG 图像 我希望用户能够单击地图上的名称并被带到特定的面板 例如 地图上有三个名字 如果用户单击X 100 Y 300左右 他们会被带到一个面板 而如果他们点击X 400 Y
  • 具有常量(真)值的条件运算符?

    我正在查看 OpenSSL 中使用的一些预处理器宏 我发现了以下内容crypto stack safestack h define CHECKED STACK OF type p STACK 1 p STACK OF type 0 defi