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
next prev parent 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