typedef 函数指针?

2023-11-24

我正在学习如何动态加载 DLL,但我不明白这一行

typedef void (*FunctionFunc)();

我有几个问题。如果有人能够回答他们,我将不胜感激。

  1. Why is typedef used?
  2. 语法看起来很奇怪;后void不应该有函数名什么的吗?它看起来像一个匿名函数。
  3. 是否创建函数指针来存储函数的内存地址?

所以我现在很困惑;你能为我澄清一下吗?


typedef是将名称与类型关联起来的语言构造。
例如,您可以像使用原始类型一样使用它

typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();

像使用它们一样

myinteger i;   // is equivalent to    int i;
mystring s;    // is the same as      char *s;
myfunc f;      // compile equally as  void (*f)();

如您所见,您只需更换类型定义的名称及其定义如上所示。

难点在于C和C++中函数指针的语法和可读性,以及typedef可以提高此类声明的可读性。但是,语法是合适的,因为函数(与其他简单类型不同)可能有返回值和参数,因此有时需要对函数指针进行冗长而复杂的声明。

对于指向函数数组的指针以及其他一些更间接的风格,可读性可能会变得非常棘手。

回答你的三个问题

  • 为什么使用 typedef?为了便于阅读代码 - 特别是对于函数指针或结构名称。

  • 语法看起来很奇怪(在指向函数声明的指针中)该语法读起来并不明显,至少在开始时是这样。用一个typedef声明反而简化了阅读

  • 是否创建函数指针来存储函数的内存地址?是的,函数指针存储函数的地址。这与typedef只简化程序的编写/读取的构造;编译器只是在编译实际代码之前扩展 typedef 定义。

Example:

typedef int (*t_somefunc)(int,int);

int product(int u, int v) {
  return u*v;
}

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

typedef 函数指针? 的相关文章

  • 具有相同参数类型但具有不同常量限定符的 std::vector 的转换

    问题很简单 静态转换 或其他一些转换 通常是安全的 std vector lt Foo gt to std vector lt const Foo gt 就二进制而言 我不明白为什么本机类型会有所不同 毕竟const是一种语言约束 不应影响
  • 结构体如何存储在内存中?

    我有一个struct iof header在我的代码中 我确定它的宽度是 24 字节 我执行 sizeof iof header 它返回 32 字节宽 问题1为什么是 32 字节宽而不是 24 字节宽 问题2包括其成员在内 结构体如何存储在
  • .NET 单点登录

    我一直在尝试使用 C 为 NET Web 应用程序实现 WEB SSO 服务提供程序插件 我将使用 shibboleth 身份提供商 我已经使用 OpenSAML 库为 java 应用程序实现了相同的功能 我想知道在 NET 应用程序中使用
  • fopen_s 怎么会比 fopen 更安全呢?

    我正在处理遗留代码Windows平台 当我编译代码时VS2013 它给出以下警告 错误 C4996 fopen 该函数或变量可能不安全 考虑使用fopen s反而 要禁用弃用 请使用 CRT SECURE NO WARNINGS 详情请参见
  • STL之类的容器typedef快捷方式?

    STL 容器的常见模式是这样的 map
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 在没有 epsilon 的情况下可以将浮点数与 0.0 进行比较吗?

    我知道 要比较两个浮点值 需要使用一些 epsilon 精度 因为它们并不精确 但是 我想知道是否存在边缘情况 我不需要那个 epsilon 特别是 我想知道这样做是否总是安全的 double foo double x if x lt 0
  • ASP.NET - 在 RenderContent 调用中将事件处理程序添加到 Repeater 内的 LinkBut​​ton

    我有一个加载自定义用户控件的 Sharepoint WebPart 用户控件包含一个 Repeater 而 Repeater 又包含多个 LinkBut ton 在 Web 部件的 RenderContent 调用中 我有一些用于添加事件处
  • 如何在C中同时运行两个子进程?

    所以我开始学习并发编程 但由于某种原因我什至无法掌握基础知识 我有一个名为 fork c 的文件 其中包含一个 main 方法 在此方法中 我将 main 分叉两次 分别进入子进程 1 和 2 在孩子 1 中 我打印了字符 A 50 次 在
  • ContentDialog 未与 UWP 中心对齐

    据我所知 ContentDialog的默认行为应该是使其在 PC 上居中并在移动设备上与顶部对齐 但就我而言 即使在 PC 上我也将其与顶部对齐 但我不明白发生了什么 我正在使用代码隐藏来创建它 这是我正在使用的代码片段 Creates t
  • 无法加载程序集问题

    我收到以下错误 无法加载程序集 错误详细信息 System BadImageFormatException 无法加载文件或程序集 文件 或其依赖项之一 该程序集是由比当前加载的运行时更新的运行时构建的 无法加载 该程序集是使用 Net Fr
  • 如何将STL容器数据转储到gdb中?

    我无法在 gdb 中转储 STL 无序映射容器值 变量类型是 std unordered map var 我的 gdb 版本 7 7 1 GDB配置 configure host x86 64 linux gnu target x86 64
  • 我可以将 UseCSharpNullComparisonBehavior 用于单个查询吗?

    我有一个查询 该查询曾经是存储过程 现已转换为 EF 查询 现在已经超时了 使用 SQL Profiler 我可以看到生成的 SQL 的唯一区别是 EF 转变的新行为entity Property value into entity Pro
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 连接到没有元数据的网络服务

    我想连接到此网络服务 https training api temando com schema 2009 06 server wsdl https training api temando com schema 2009 06 serve
  • 如何将System.Windows dll添加到Visual Studio 2010 Express?

    我正在开发一个小型应用程序C and VS2010 as IDE with NET框架4 我想用CaptureSource类以便从笔记本电脑的网络摄像头捕获视频 为此我需要添加一个命名空间System Windows DependencyO
  • “1个未解决的外部”C++

    我已经检查了所有文件之间的连接以及类和函数定义 但每次我尝试运行我的程序时 它都会阻止我并告诉我它有 1 个未解析的外部 该程序应该打开多个文件 一个 学生 文件和一个 成绩 文件 从中读取数据 然后使用 查询文件 来查找数据 找到查询中要
  • 从脚本启用/禁用 GameObject 组件 [Unity3D]

    我需要获取一个脚本中设置的布尔值 放入名为 bouclier 的变量 以启用或禁用游戏对象 该变量位于游戏对象 Player 中 此处右下角 我需要启用或禁用这个游戏对象 Bouclier01 为此 我将脚本附加到游戏对象 Bouclier
  • 如何在 C 中创建最低有效位设置为 1 的掩码

    这个功能如何运作 最低有效 n 位设置为 1 的掩码 Example n 6 gt 0x2F n 17 gt 0x1FFFF 我根本不明白这些 尤其是 n 6 gt 0x2F 另外 什么是面膜 通常的方法是采取1 并将其左移n位 这会给你类

随机推荐

  • 用作睡眠的空 for 循环会被优化掉吗? [复制]

    这个问题在这里已经有答案了 我正在查看一些要审查的代码 并遇到了这样的繁忙等待 int loop us 32 int x for x 0 x
  • PerformSelector 可能会导致泄漏,因为它的选择器未知

    我收到 ARC 编译器发出的以下警告 performSelector may cause a leak because its selector is unknown 这就是我正在做的 controller performSelector
  • 来自 Androidcamera2 API 的图像数据在 Galaxy S5 上翻转和压缩

    我正在实现一个应用程序 该应用程序对来自相机的实时图像进行实时图像处理 它使用现已弃用的 android hardware Camera 进行工作 但有限制 为了提高灵活性和性能 我想使用新的 android hardware camera
  • Webpack-5 - Webpack 尝试解析 scss(或 css)中图像的根相对路径并失败

    升级到 Webpack 5 后出现此错误 Error Can t resolve path to image jpg in app path to module module 问题在于用于 css 背景的图像 其中文件未存储在存储库中 并且
  • scrapy允许所有域

    I saw this发布以使 scrapy 抓取任何不受允许域限制的网站 有没有更好的方法 例如在允许的域变量中使用正则表达式 例如 allowed domains 我希望除了侵入 scrapy 框架之外还有其他方法来做到这一点 根本不要设
  • 两个 TCP 套接字之间基于内核 (Linux) 的数据中继

    I wrote TCP中继服务器其工作原理类似于对等路由器 超级节点 最简单的情况是两个打开的套接字以及它们之间的数据中继 客户端 服务器 客户端 然而 服务器必须服务大约 2000 个这样的 A B 对 即4000个插座 有两种众所周知的
  • PHPStorm / Webstorm,如何使用关联程序打开文件

    我是 Webstorm PHPStorm 的新用户 在使用此 IDE 之前 我使用 Netbeans 要打开 xds 文件 这是一种文本文件 您可以像打开 js 文件一样打开它 并在编辑器中对其进行编辑 在 Netbeans 中 您必须选择
  • 如何查找文件“data.txt”中存储的特定文本并且该文本仅出现一次

    我查找的行存储在文件 data txt 中 并且是唯一只出现一次的文本行 我如何使用 linux 找到该特定行 这有点旧 但我想你正在寻找这个 cat data txt sort uniq u 这将显示文件中仅出现一次的唯一值 如果您问的话
  • 通过pdo停止查询

    我正在使用 PDO 用户应该可以选择停止之前触发的请求 例如 现在我单击 生成报告 但是在请求之后我忘记选择另一个字段 导致报告无用 所以我需要取消请求并提出新的请求 基本上 如何取消正在运行的 MYSQL 查询 if isset POST
  • 如何将 Facebook 应用程序与现有粉丝页面链接

    现在 Facebook 已经降低了应用程序的登陆页面的价值 如何让我的应用程序指向其登陆页面的粉丝页面 我已经检查了 高级 选项卡和联系人 但没有地方可以看到将我的粉丝页面列为链接到我的应用程序 根据这篇博客文章来自十二月 新应用程序可以创
  • 如何在 ColdFusion 中循环查询列

    我在 CFC 中有一个查询 该函数本身包含一个简单的查询
  • 如何覆盖Spring Cloud Ribbon中的ribbon.serverListRefreshInterval默认值?

    我编写了一个简单的 Spring Cloud Ribbon 应用程序 来调用在 Eureka 中注册的 REST 服务 但如何覆盖ribbon serverListRefreshInterval价值 默认值是30秒 我想减少时间间隔 提前致
  • 带颜色渐变填充的 Matplotlib 矩形

    我想在我的轴实例中的任意位置 任意尺寸绘制一个从左到右渐变颜色填充的矩形 ax1 坐标系 我的第一个想法是创建一个路径补丁并以某种方式将其填充设置为颜色渐变 但根据这个帖子没有办法做到这一点 接下来我尝试使用颜色条 我创建了第二个轴实例ax
  • 在matlab中,如何在图像上绘制网格

    如何在图像上绘制网格 它应该成为该图像本身的一部分 它应该能够在图像本身上显示一些行和列 可以指定行和列的线 事实上 一些研究论文讨论有关图像扭曲的结果的方式让我感到鼓舞 其中一个链接是这样的 http www hammerhead com
  • 支持 Final 字段的 Java 持久性提供程序

    我对 Java 很陌生 但我已经养成了尽可能使用 Final 声明不变性的习惯 我认为这是一件好事 考虑 f 我读到 JPA 不支持最终字段 休眠 TopLink 我不确定这些 但我现在更喜欢 JPA 从理论上讲 是否有可能 比如说通过反射
  • 如何使用 OpenSSL 编译 .c 文件?

    我正在尝试编译一个小的 c 文件 其中包含以下内容 include
  • 如何仅使用 Parser 实例将 XML 写入文件?

    这是我的 Groovy 代码 def xml new XmlParser parse fileName xml each e gt some changes are being made to XML xml append test tes
  • 为什么 SIGFPE 用于整数算术异常?

    Why was SIGFPE用于整数算术异常 例如除以零 而不是为整数算术异常创建单独的信号或通常首先为算术异常命名信号 IEEE Std 1003 1 标准将 SIGFPE 定义为 错误的算术运算 并且并没有真正提到浮点运算 这背后的原因
  • 如何使用 TF2.0 中内置的 Keras 生成 CNN 热图(tf.keras)

    我曾经基于 TensorFlow 1 之上的独立 Keras 库为我的卷积神经网络生成热图 然而 在我切换到 TF2 0 并内置之后 效果很好tf keras实施 与急于执行 我不能再使用旧的热图生成代码 所以我为 TF2 0 重写了部分代
  • typedef 函数指针?

    我正在学习如何动态加载 DLL 但我不明白这一行 typedef void FunctionFunc 我有几个问题 如果有人能够回答他们 我将不胜感激 Why is typedef used 语法看起来很奇怪 后void不应该有函数名什么的