Alvin Oga <[EMAIL PROTECTED]> wrote on 24/01/2002 (11:13) : > > hi ya ralf > > i would have thought that gcc would barf on b[20]='X' > and similarly for theother variable assignments since its not prev > allocated/defined.. and yet explicitly assigned (incorrectly??)...
Why there are no range tests in C. Lets do it Ada 95 instead: I have tired to make the code as similar to C as possible so it is a bit ackward Ada-wise but here goes: Note I have written here the line numbers in front of the code so that it is easier to check with the compiler results. file: example.adb ------------------------------------------------------------------------ 1 with Ada.Text_IO; use Ada.Text_IO; -- equvalent to #include <stdio.h> 2 3 procedure example is 4 -- Ada has it's own String type, but lets do what the C example does. 5 type C_String_Type is array (1..10) of Character; 6 7 a : C_String_type; 8 b : C_String_type; 9 begin 10 11 a := ('1','2','3','4','5','6','7','8','9', others => ' '); 12 -- others => ' ' just means that the rest of the array will be 13 -- filled with spaces. 14 15 -- Printing a becomes ackward as I didn't use the Ada Strings type 16 -- in this example, but as you can see the for loop is nice. 17 18 Put ("a: "); 19 for i in C_String_Type'Range loop 20 Put (a(i)); 21 end loop; 22 23 New_Line; 24 25 -- Now the faulty code. 26 b (20) := 'X'; 27 b (21) := 'Y'; 28 b (22) := 'Z'; 29 30 -- No point in printing again as the code will never reach here. 31 end example; ------------------------------------------------------------------------ Now when compiling we get: % gnatmake example.adb gnatgcc -c example.adb example.adb:26:07: warning: value not in range of subtype of "Standard.integer" defined at line 5 example.adb:26:07: warning: "constraint_error" will be raised at run time example.adb:27:07: warning: value not in range of subtype of "Standard.integer" defined at line 5 example.adb:27:07: warning: "constraint_error" will be raised at run time example.adb:28:07: warning: value not in range of subtype of "Standard.integer" defined at line 5 example.adb:28:07: warning: "constraint_error" will be raised at run time gnatbind -x example.ali gnatlink example.ali And if one ignore the wranings and run the program: % ./example a: 123456789 raised CONSTRAINT_ERROR : example.adb:26 So as the compiler said the code would not run without a constraint error being raised at line 26 which is the faulty code. Preben Randhol -- «For me, Ada95 puts back the joy in programming.»