comp.lang.ada
 help / color / mirror / Atom feed
From: Martin Klaiber <martinkl@zedat.fu-berlin.de>
Subject: Re: Error-names.
Date: Mon, 1 Mar 2004 12:20:37 +0100
Date: 2004-03-01T12:20:37+01:00	[thread overview]
Message-ID: <5tibh1-m92.ln1@martinkl.dialup.fu-berlin.de> (raw)
In-Reply-To: tOu0c.11106$PR3.246776@attbi_s03

tmoran@acm.org wrote:

>  It would not be hard to leave out, or have multiple uses of, an error
> code, as in:
>    Constraint_Error_Code : constant Exception_Codes := -10;
>    Program_Error_Code    : constant Exception_Codes := -9;
>    Storage_Error_Code    : constant Exception_Codes := -9;
>    Status_Error_Code     : constant Exception_Codes := -7;
>    My_Special_Error_Code : constant Exception_Codes := -5;
>    ...
> Similarly, a new exception might be added, but someone forgets to
> add it to the if-elsif list.

> With the if-elsif style you can only hope that neither of those happens.
> But if you do

>    Coded_Exception_List : constant array(Exception_Codes)
>    of Ada.Exceptions.Exception_ID
>      := (Constraint_Error_Code => Constraint_Error'Identity,
>          Program_Error_Code    => Program_Error'Identity,
>          Storage_Error_Code    => Storage_Error'Identity,
>          IO_Status_Error_Code  => Ada.IO_Exceptions.Status_Error'Identity,
>          My_Special_Error_Code => My_Special_Exception'Identity,
>          ...
> then the compiler will warn you if two of your error codes are the
> same, or if you've left any out in the Exception_Codes range.

This is right but how can I export the constants then?  At the moment
I use in the spec-file:

   -- No error:
   No_Error_Code : constant C_Integer := 0;
   pragma export (C, No_Error_Code, "no_error_code");

   -- Fallback:
   General_Error_Code : constant C_Integer := -1;
   pragma export (C, General_Error_Code, "general_error_code");

and so on.  The reason is that I want the C-programmer to use the
constants-names instead of the values, because I can't guarantee that
the values will not change in the future.

BTW: does someone know why these constants are not recognized by the
C-program as constants?  They are declared as constants and in the C
header-file I put:

   /* error-codes */

   extern const int no_error_code;
   extern const int general_error_code;
   ...

But if I want to use it in a switch-command like that:

   int year;
   ...
   for (year = 2003; year <= 2005; ++year) {
      switch (set_year (year)) {
      case no_error_code :
         set_lzz (1);
         ...
                         
the compiler says:

   test_c.c:20: case label does not reduce to an integer constant

Is my exporting wrong?  Or is this a C-problem?  When I use "case 0"
instead of "case no_error_code" it works ok, but this is what I want
to avoid.

Thanks,
Martin



  reply	other threads:[~2004-03-01 11:20 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-28 12:58 Error-names Martin Klaiber
2004-02-28 13:35 ` Error-names Martin Dowie
2004-02-28 15:26   ` Error-names Martin Klaiber
2004-02-28 17:19     ` Error-names Marius Amado Alves
2004-02-28 18:31       ` Error-names Martin Klaiber
2004-02-28 19:47         ` Error-names tmoran
2004-02-28 20:29           ` Error-names Martin Klaiber
2004-02-29 19:03           ` Error-names Jeffrey Carter
2004-02-29 20:04             ` Error-names tmoran
2004-02-29 23:24               ` Error-names Björn Persson
2004-03-01 11:29                 ` Error-names Martin Klaiber
2004-03-01 12:48                   ` Error-names Marius Amado Alves
2004-03-02  2:15                     ` Error-names Jeffrey Carter
2004-02-29 20:33             ` Error-names Martin Klaiber
2004-02-29 23:43               ` Error-names tmoran
2004-03-01 11:20                 ` Martin Klaiber [this message]
2004-03-07 15:10                   ` Error-names Björn Persson
2004-03-08  5:42                   ` Error-names Dave Thompson
2004-02-28 20:26         ` Error-names Jacob Sparre Andersen
2004-02-28 18:29 ` Error-names Alexandre E. Kopilovitch
2004-02-29  5:30 ` Error-names David Marceau
2004-02-29 12:17   ` Error-names Martin Klaiber
2004-02-29 19:56     ` Error-names David Marceau
2004-02-29 21:57       ` Error-names Martin Klaiber
2004-03-01 23:20       ` Error-names Randy Brukardt
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox