【发布时间】:2018-10-26 23:17:33
【问题描述】:
我有一个这样的类型定义的头文件
#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 代码进行太多更改
【问题讨论】:
-
实现相关的功能可能会对您有所帮助。参见例如gcc.gnu.org/onlinedocs/gnat_ugn/Preprocessing.html
-
很好,我不知道这个功能。我会记住这一点,但首先会尝试 Holt 和 Alex 更干净的方式。