从 Ada 调用 scanf

2023-12-10

如何从 Ada 调用 scanf ?也就是说,大概有一个适当的 pragma import 声明,但是声明会是什么样子呢?

(我感兴趣的是如何从 Ada 调用更难以驾驭的 C 函数,而不是如何解析字符串本身,所以我不是在寻找纯粹的 Ada 解决方案。我的设置是 Gnat、Ubuntu Linux、x64(如果可以)有所作为。)


这张纸指出

Ada 无法声明采用不同数量、不同类型的参数的函数。可以声明一组“printf”函数,这些函数接受一个字符串、一个字符串和一个整数、一个字符串和一个浮点数、一个字符串和 2 个整数等等,然后将每个函数声明为 Import (C) 2.但这需要大量的声明,一个声明用于应用程序中的每一种不同的用途,所以它确实不切实际。

同样的情况也适用于scanf(),Ada 2012 的额外好处是让您可以选择out and access参数规格(在早期版本中,您必须使用access因为函数不允许有out参数)。

此外,我不认为 C 编译器必须对可变参数函数使用与普通函数相同的参数传递机制(参考资料暗示了这一点,我记得但现在找不到最近关于这些的对话)。

也就是说,这里有一个在带有 GCC 4.6.0 的 Mac OS X 上运行良好的示例:

with Ada.Text_IO; use Ada.Text_IO;
with Interfaces.C; use Interfaces.C;
procedure Variadic is
   function Scanf (Fmt : char_array; Result : access int) return int;
   pragma Import (C, Scanf, "scanf");
   Status : int;
   Result : aliased int;
begin
   Status := Scanf (To_C ("%d\n"), Result'Access);
   Put_Line ("status: " & int'Image (Status));
   if Status = 1 then
      Put_Line ("result: " & int'Image (Result));
   end if;
end Variadic;

(不确定\n在格式参数中!)

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

从 Ada 调用 scanf 的相关文章

随机推荐

  • Python 压缩运行长度编码

    我正在尝试了解游程编码 但我在网上发现了这个挑战 但我无法做到 它要求您编写一个名为compression strg 的压缩函数 该函数将长度为64的二进制字符串strg作为输入 并返回另一个二进制字符串作为输出 输出二进制字符串应该是输入
  • Python 子进程在什么情况下会收到 SIGPIPE?

    我正在阅读子进程模块部分中有关 Popen 类的 Python 文档 我遇到了以下代码 p1 Popen dmesg stdout PIPE p2 Popen grep hda stdin p1 stdout stdout PIPE p1
  • 为什么 IUpdateSession::WebProxy 不能在 Windows 10 上运行?

    我有一些内部代码 可以使用 Windows Update API 执行 Microsoft Update 扫描 由于某些客户端无法直接访问互联网 因此我明确设置了WebProxy属性指向我们的本地代理服务器 在测试期间 在 Windows
  • 如何在 Swift 3.0 中使用 Alamofire 解析 JSON,无需任何第三方库

    这里我想通过url解析JSON 这是 url 上可用的实际 JSON 数据 所以我需要解析它并使用 Alamofire 在我的应用程序中读取 但我做不到 我的 url 中的 JSON 数据 main date 2017 01 11 USDA
  • 将 JSON 数据解析为 Excel 工作表

    我正在尝试使用以下代码将 JSON 数据作为表格提取到 Excel 工作表中 Sub test Dim httpObject As Object Set httpObject CreateObject MSXML2 XMLHTTP sURL
  • 如何在按钮单击时调用小部件的 onUpdate 方法?

    基本上 我有一个简单的应用程序小部件 它显示文件中的值并每 24 小时更新一次 它工作正常 但后来我想将刷新按钮添加到我的小部件中 并且每次单击该按钮时我想调用 onUpdate 我一直在寻找一些答案 但它们似乎与我想做的事情不符 应用程序
  • Android SQLite 更新/插入

    我想要UPDATE我的桌子上有一排 WHERE 键 最后选择的如果具有该键的行不存在 我想要INSERT it 我可以得到UPDATE如果该行已经存在 则可以工作 但不会INSERT如果丢失 我已经尝试过这些 第一个正确更新 但不插入 St
  • Elmah 无法使用 ASP.NET 网站

    我尝试在我的 asp net 网站上使用 elmah 但每当我尝试访问http localhost 端口 elmah axd我得到资源未找到异常 我的 web config 如下
  • Git Config 仅排除一个分支的文件

    我想在我的公共分支中排除一个名为 config dbconfig js 的文件 我用它推送到 github 但仍然能够从 master 推送到我的 noester com git 存储库以推送到生产环境 我将配置文件更改为 core rep
  • Typescript 给出“找不到模块‘xmlhttprequest’的声明文件。”

    Using import XMLHttpRequest from xmlhttprequest 在 Node 上 当我使用以下命令进行编译时 出现以下错误tsc index ts 4 col 32 错误 7016 QF 可用 找不到模块 的
  • JVM 缺少 Rhino

    我有一个使用 ScriptEngine 处理一些 javascript 的项目 并且在我的机器上运行良好 但是当我将项目的 jar 发送到服务器时 我发现服务器的 JVM 没有内置 Rhino 当该代码调用 new ScriptEngine
  • 发送至:网络无法访问

    我有两台机器正在测试我的代码 一台工作正常 另一台我遇到了一些问题 我不知道为什么会这样 我正在使用一个对象 C 作为我项目的网络部分 在服务器端 我这样做 为了清楚起见 删除了错误检查 res getaddrinfo NULL port
  • 在 Android 中完成父级和当前活动

    我有 3 项活动 活动 A 会导致活动 B 活动 B 又可以返回活动 A 或启动活动 C 但是 如果我在活动 C 中按返回 应用程序应该关闭 总结 活动 A 启动活动 B 紧迫Back活动 B 应该导致 A 活动 B 开始活动 C 紧迫Ba
  • 使用星号 * 量词的奇怪结果

    我正在尝试在一个简单的字符串上练习星号 量词 但是虽然我只有两个字母 但结果包含第三个匹配项 结果出来了 array 1 0 gt array 3 0 gt string 1 a 1 gt string 0 2 gt string 0 据我
  • 如何在不同的系统文化中转换日期时间?

    我需要转换DateTime不同文化格式中的值 无论系统中设置如何 没有选择任何特定的时区进行转换 任何区域性格式都使用转换日期时间值 DateTimeFormatInfo ukDtfi new CultureInfo CultureInfo
  • MFMailComposeViewController 和隐私 - 隐藏“收件人:”字段?

    我正在创建我的第二个 iPhone 应用程序 并且我已经使用 MFMailComposeViewController 包含了一个反馈表单 这可以正常显示和工作 但我不确定是否希望所有用户都能看到我的电子邮件地址 有没有办法将 to 字段设置
  • CSS - 渐变文本阴影

    I want to make a gradient text shadow like this Is it possible to do that with CSS or and Javascript Thanks for help 你可以
  • 如何在Asp.Net MVC中导出到Excel?

    SCRIPT function PostExportValues meter id range type id start date end date returnUrl var meter meter selection val 0 aj
  • 在 OpenGL 着色器的 main 之外进行计算是否合理?

    我有一些类似于以下的顶点着色器代码 这是一个简化的示例 attribute vec2 aPosition attribute vec4 aColor varying lowp vec4 vColor uniform vec4 uViewpo
  • 从 Ada 调用 scanf

    如何从 Ada 调用 scanf 也就是说 大概有一个适当的 pragma import 声明 但是声明会是什么样子呢 我感兴趣的是如何从 Ada 调用更难以驾驭的 C 函数 而不是如何解析字符串本身 所以我不是在寻找纯粹的 Ada 解决方