我缺少了一些关于Ada和types的基本概念我只想这样做:

    procedure Example(  rec_len : in  interfaces.c.short )  is

        shortLen      : Short_integer   := 0;
        recLen        : integer := 0;

    begin -- example

         shortLen := rec_len;   -- and
         recLen   := shortLen;

         Text_IO.Put_Line( "rec length = "& Integer'IMAGE( recLen ));

    end example;

换句话说,从C语言short类型中获取整数值。
i-c.ads中,short的定义是相同的--
     type short is new Short_Integer;

我找不到一个引用或示例来说明做这个简单操作所需的合成糖。
在这行:shortLen := rec_len,GNAT编译器会显示“expected type Standard.Short_Integer”,这是当然的但是,我还没有找到合适的“to_Short()类型调用我意识到这是一个基本的问题,我仍然认为它应该是我可以在某个地方(很容易)找到的文件???).提前感谢你的专业知识。

最佳答案

Ada(与C不同)不允许在没有显式转换的情况下将一个数值类型的值赋给另一个数值类型的变量。
这应该有效:

shortLen := Short_Integer(rec_len);
recLen := Integer(shortLen);

本声明:
type short is new Short_Integer;

不会使short成为Short_Integer的别名(正如typedef在C中所做的那样)它使short成为从Short_Integer派生的一种新的、独特的类型。

关于c - 将c short分配给Ada short_integer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55213782/

10-13 04:27