Ada 有预处理器吗?

2024-06-14

为了支持 C/C++ 中的多个平台,可以使用预处理器来启用条件编译。例如。,

#ifdef _WIN32
  #include <windows.h>
#endif

你怎么能在艾达中做到这一点? Ada 有预处理器吗?


您的问题的答案是否定的,Ada 没有内置于该语言中的预处理器。这意味着每个编译器可能有也可能没有,并且没有用于预处理和条件编译之类的“统一”语法。这是故意的:它被认为对 Ada 精神“有害”。

几乎总有办法解决缺少预处理器的问题,但解决方案通常会有点麻烦。例如,您可以将平台特定函数声明为“单独”,然后使用构建工具编译正确的函数(可以是项目系统,使用 pragma body 替换,也可以是非常简单的目录系统......将所有 Windows 文件/windows/ 中的文件以及 /linux/ 中的所有 linux 文件,并包括平台的相应目录)。

话虽如此,GNAT 意识到有时您需要一个预处理器,因此创建了 gnatprep。无论编译器如何,它都应该可以工作(但您需要将其插入到构建过程中)。同样,对于简单的事情(例如条件编译),您可能只需使用 c 预处理器,甚至可以推出自己的非常简单的预处理器。

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

Ada 有预处理器吗? 的相关文章

  • 如何解决 flutter 的代理设置问题?

    我是颤振的新手 我们在网络中设置了代理 该代理已经应用于android studio并且运行良好 创建新应用程序时 它运行良好 但是 获取包不起作用 它返回 Could not resolve URL https pub dartlang
  • Python 中可用和已使用的系统内存? [复制]

    这个问题在这里已经有答案了 如何从 Python 获取可用和当前使用的内存 它需要是跨平台的 并且至少可以在 Windows Mac OS X 和 Linux 上运行 我想向我的应用程序中的用户报告没有足够的可用内存来继续 你应该看看psu
  • python:根据操作系统使用不同的函数

    我想编写一个可以在 Linux 和 Solaris 上执行的脚本 大多数逻辑在两种操作系统上都是相同的 因此我只编写一个脚本 但由于某些部署的结构会有所不同 文件位置 文件格式 命令语法 因此两个平台上的一些功能会有所不同 这可以像这样处理
  • 区分大小写的文件系统上的 File.equals

    我有一个字符串形式的文件路径 在 Java 中 我需要确定文件系统上是否存在该文件 并且我们的代码需要跨平台 因为它在 Windows Linux 和 OS X 上运行 问题是文件路径和文件本身的大小写可能不匹配 即使它们确实代表相同的文件
  • 如何在 Visual Studio Community 2015 中更新 Xamarin for Android

    我最近安装了 Visual Studio Community 2015 并且一直在关注 MSDN 教程 当设计应用程序的外观时 我选择了 Resources layout 文件夹中的 Main axml 文件 Android 设计器失败并显
  • ‘access’参数模式有什么用处?

    Ada 中有三种传递参数的 正常 模式 in out and in out 但还有第四种模式 access 有什么需要它们的吗 即 否则不可能实现的事情 现在 我确实知道 GNAT JVM Ada 编译器在导入的 库 规范中大量使用了它们
  • Ada 的命令行参数

    我正在编写一个 Ada 程序 该程序应该对字母字符进行大小写转换 该程序使用 1 2 或 3 个命令行参数 我几乎已经把事情写下来了 但我不知道如何进行论证 命令行参数是 单个字符指定是否要进行大写转换或小写转换 应用于输入 U 或 u 表
  • 交叉编译 Qt 4.7 时出现“非法指令”

    我已经在这个问题上苦苦挣扎了一个多星期了 但仍然找不到解决方案 我正在尝试为 ARM 设备交叉编译 Qt 4 7 嵌入式开源版本 构建过程本身可以顺利完成 但生成的二进制文件似乎包含处理器无法理解的指令 构建主机是 i386 上的 Debi
  • [“03C0”]如何匹配附件P中的语法?

    我正在编写一个工具来使用 2005 年附录 P 中提供的语法来解析 Ada 源文件 通过下面的代码 我知道 03C0 代表 希腊字母Pi 但它是合法的变量名吗 01 package Ada Numerics is 02 Pi constan
  • Java中如何做系统捷径跨平台集成?

    您可能知道 Mac OS X 中保存的快捷键是Cmd S在 Windows 上是Ctrl S 关闭应用程序的捷径是Cmd QWindows 是Alt F4 但问题是如何在 java 应用程序中执行这些操作 我是否需要找到我在应用程序中使用的
  • 获取主目录的跨平台方式是什么?

    我需要获取当前登录用户的主目录的位置 目前 我在 Linux 上使用了以下命令 os getenv HOME 但是 这在 Windows 上不起作用 执行此操作的正确跨平台方法是什么 你想使用os path expanduser http
  • 跨平台 UI 工具包 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要编写跨平台 GUI 应用程序 我可以使用什么工具包 目前我在 Windows MSVC 和 Linux gcc 中工作 最流行的选择
  • Ada:用可变大小的数组打包记录

    我正在寻找创建一个打包记录 它可以容纳长度从 5 50 个元素不等的数组 是否可以以这样的方式来完成此操作 以便可以在不浪费空间的情况下打包记录 当我去创建记录时 我会知道数组中有多少元素 the range of the array ty
  • 在 Linux 服务器上创建和编辑 MS-Word 文档?

    希望开发处理文档的服务器端应用程序 源文档大多是MS Word 2003 2007 即MS版本的Docx 希望服务器应用程序能够在linux或windows上运行 想知道在linux下读写MS Word文件最好的工具或库是什么 兼容性是最重
  • 我应该如何解决 GNAT GPS“找不到库”问题并在 Mac 上构建我的第一个“Hello World”程序?

    我下载了 GNAT Community 2019 并安装在我的 Mac 上的主文件夹 Users leon opt GNAT 中 我在目录 Users leon opt GNAT 2019 bin 中运行命令 gps GPS 出现了 然后我
  • Ada 中的 In/Out 与 Out

    我有一个简短的艾达问题 如果我有一个程序may写出一个变量 或者我might不用管它 它应该是一个Out参数或In Out范围 我想这可以归结为一个问题 如果调用者调用参数如下的过程 它会看到什么Out但该过程不触及参数 它看到相同的值吗
  • Makefile 和跨平台开发

    我一直在试图弄清楚如何创建一个可以为所有主要操作系统编译的 C 程序 我考虑过使用 makefile 所以我只需要更改目标操作系统 但我有一些问题 我的第一个问题是 我不知道如何更改目标操作系统 以便我可以在一个操作系统上编译 但在所有操作
  • Spark-Ada 数组总计的后置条件

    如何为对数组元素求和的函数编写 Spark 后置条件 Spark 2014 但如果有人向我展示如何为早期的 Spark 做到这一点 我应该能够适应它 所以如果我有 type Positive Array is array Positive
  • Kony应用程序是否必须使用Kony中间件?

    我正在使用 Kony Studio 创建跨平台应用程序 我们正在准备后端和网络服务 我们可以在不访问 Kony 中间件的情况下使用相同的服务吗 如果是 您能帮忙提供一些示例代码和教程吗 我们可以在不使用中间件的情况下调用使用服务HTTP请求
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove

随机推荐