跳到内容

Ada 编程/库/接口

来自维基教科书,开放的书籍,开放的世界

Ada. Time-tested, safe and secure.
Ada. 经久耐用,安全可靠。

Interfaces 包有助于与其他编程语言进行接口。Ada 是少数将与其他语言的接口作为语言标准一部分的语言之一。语言标准定义了与 CCobolFortran 的接口。当然,任何实现都可能定义进一步的接口——例如,GNAT 定义了与 C++ 的接口。

实际上,与其他语言的接口由以下内容提供pragma Export,pragma Importpragma Convention.

在 Ada 2012 中,这些子句具有使用 "with" 代替 "pragma" 的替代形式。

例如,以下是一个完整程序,它查询 Unix 系统上的 terminfo(终端信息)数据库以获取当前终端窗口的尺寸。它与 ncurses 包中的 C 语言函数进行接口,因此它必须在编译时与 ncurses 链接(例如,使用 -lncurses 开关)。

 with Ada.Text_IO;
 with Interfaces.C;
 with Interfaces.C.Pointers;
 with Interfaces.C.Strings;
 
 procedure ctest is
   use  Interfaces.C;
 
   type int_array is array (size_t range <>) of aliased int with Pack;
 
   package Int_Pointers is new Pointers (
     Index              => size_t,
     Element            => int,
     Element_Array      => int_array,
     Default_Terminator => 0
   );
 
   -- int setupterm (char *term, int fildes, int *errret);
   function Get_Terminal_Data (
     terminal           : Interfaces.C.Strings.chars_ptr; 
     file_descriptor    : int; 
     error_code_pointer : Int_Pointers.Pointer
   ) return int
   with Import => True, Convention => C, External_Name => "setupterm";
 
   -- int tigetnum (char *name);
   function Get_Numeric_Value (name : Interfaces.C.Strings.chars_ptr) return int
   with Import => True, Convention => C, External_Name => "tigetnum";
 
   function Format (value : int) return String is
     result : String := int'Image (value);
   begin
     return (if result(1) = ' ' then result(2..result'Last) else result);
   end Format;
 
   error_code         : aliased int;
   error_code_pointer : Int_Pointers.Pointer := error_code'Access;
 
 begin
   if Get_Terminal_Data (Interfaces.C.Strings.Null_Ptr, 1, error_code_pointer) = 0 then
     Ada.Text_IO.Put_Line (
       "Window size: " &
       Format (Get_Numeric_Value (Interfaces.C.Strings.New_String ("cols"))) & "x" & 
       Format (Get_Numeric_Value (Interfaces.C.Strings.New_String ("lines")))
     );
   else
     Ada.Text_IO.Put_Line ("Can't access terminal data");
   end if;
 end ctest;

维基教科书

[编辑 | 编辑源代码]

Ada 参考手册

[编辑 | 编辑源代码]
华夏公益教科书