我有一个头文件,其类型定义如下
#ifndef SETSIZE
#define SETSIZE 32
#endif
typedef struct _set {
unsigned array[SETSIZE];
} set_t;
要使用相应的C函数,我需要在Ada中使用set_t类型 . 问题是SETSIZE是一个可配置的参数(默认值为32) . 如果我理解正确,我无法访问Ada的预处理器定义 . 是否可以在c文件中添加一个常量并在Ada中使用它,如下所示:
#ifndef SETSIZE
#define SETSIZE 32
#endif
const size_t test = SETSIZE;
// Alternative
enum { test2 = SETSIZE };
--Ada--
-- import test somehow
type set_array is array (0 .. test) of aliased Interfaces.C.unsigned;
type set_t is record
array_field : aliased set_array;
end record;
或者在Ada中正确使用此类型的任何其他方式,而无需在原始C代码中进行太多更改
2 回答
为什么不简单:
在你的
C
文件中:测试
gnatmake 4.8.1
:编译
set_def.c
:编译
main.adb
并与set_def.o
链接:在类似的情况下,我所做的是添加一个从Ada导入的函数:
而在Ada方面:
如果你不想重复调用这个函数,对于(可以忽略不计的话)开销,你可以在函数定义之后:
我猜你也可以用变量做同样的事情 .