我正在尝试将一个常量从C移动到位于头文件中的Ada。
file.h
我如何将此常量导出到ada?我知道要导出函数并将它们导入ada …
如果您正在询问如何手动编写此常量的Ada表示,那么答案就是
TEST : constant := 16#1234#;
如果你想自动维持C和Ada之间的关系,你可以得到 gcc (或更好, g++ ;看到最后)做咕噜咕噜的工作。特定 sterisk.hh 包含你的例子,
gcc
g++
sterisk.hh
#define TEST 0x1234
用它编译它
g++ -c -fdump-ada-spec sterisk.hh
产生的 sterisk_hh.ads
sterisk_hh.ads
pragma Ada_2005; pragma Style_Checks (Off); with Interfaces.C; use Interfaces.C; package sterisk_hh is TEST : constant := 16#1234#; -- sterisk.hh:1 end sterisk_hh;
第三种方法是创建一个包含标题的小C源(这里C更好;你不希望名字在目标文件中被破坏) sterisk.c :
sterisk.c
#include "sterisk.hh" const int _name_thats_unlikely_to_clash = TEST;
并编译为 sterisk.o :
sterisk.o
gcc -c sterisk.c
然后,在你的Ada来源:
Test : constant Integer with Import, External_Name => "_name_thats_unlikely_to_clash";
当然,这种方式意味着你必须决定常量的特定类型,并且必须匹配C类型。
此外,您需要在链接中包含C对象文件:
gnatmake foo.adb -largs sterisk.o
为什么是 g++ 比...更好 gcc ?因为 g++ 保留C源中的更多名称,例如函数中的参数名称。