Sfortunatamente, in C const
le variabili non sono realmente costanti.
Di seguito sono riportati gli estratti dello standard C99.
6.7.8 Initialization
- All the expressions in an initializer for an object that has static storage duration shall be constant expressions or string literals.
Le costanti sono definite come segue:
6.4.4 Constants
Syntax
constant:
integer-constant (e.g. 4, 42L)
floating-constant (e.g. 0.345, .7)
enumeration-constant (stuff in enums)
character-constant (e.g. 'c', '\0')
Lo standard definisce espressioni costanti come segue:
6.6 Constant expressions
(7) More latitude is permitted for constant expressions in initializers. Such a constant expression shall be, or evaluate to, one of the following:
— an arithmetic constant expression,
— a null pointer constant,
— an address constant, or
— an address constant for an object type plus or minus an integer constant expression.
(8) An arithmetic constant expression shall have arithmetic type and shall only have operands that are integer constants, floating constants, enumeration constants, character constants, and sizeof expressions. Cast operators in an arithmetic constant expression shall only convert arithmetic types to arithmetic types, except as part of an operand to a sizeof operator whose result is an integer constant.
Così, c
e a
non sono espressioni costanti e non possono essere utilizzati come inizializzatori nel tuo caso.
sguardo al pannello sulla destra di questa domanda a questo è stato chiesto molte volte prima. Si prega di cercare questo sito prima di chiedere. –
Posso compilare il tuo codice bene. quale compilatore/sistema stai usando? – none
@gokcehan: stai usando un compilatore C++, per caso? –