Mega Search
23.2 Million


Sign Up

Make a donation  
Interfacing enums with C  
News Group: comp.lang.ada

Let in C code are defined:

typedef enum { A=1, B=2 } option_type;

void f(option_type option);

Let we also have

type Option_Type is (A, B);
for Option_Type'Size use Interfaces.C.unsigned'Size;
for Option_Type use (A=>1, B=>2);

X: Option_Type := A;

Which of the following code is correct (accordingly RM)?

-- First code
declare
   procedure F (Option: Option_Type)
      with Import, Convention=>C, External_Name=>"f";
begin
   F(X);
end;

or

-- Second code
declare
   procedure F (Option: Interfaces.C.unsigned)
      with Import, Convention=>C, External_Name=>"f";
   function Conv is new Ada.Unchecked_Conversion(Option_Type, Interfaces.C.unsigned);
begin
   F(Conv(X));
end;

I think both first and second Ada fragments are correct but am not sure.

-- 
Victor Porton - http://portonvictor.org

Vote for best question.
Score: 0  # Vote:  0
Date Posted: 17-Aug-2014, at 10:02 PM EST
From: Victor Porton