So why almost everyone uses the const at beginning of declaration, as it would be more intelligible the way I mentioned?
It's just a coding style, both valid syntax.
C11 §6.7 Declarations
Syntax
declaration:
declaration-specifiers init-declarator-listopt ;
static_assert-declaration
declaration-specifiers:
storage-class-specifier declaration-specifiers opt
type-specifier declaration-specifiers opt
type-qualifier declaration-specifiers opt
function-specifier declaration-specifiers opt
alignment-specifier declaration-specifiers opt
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator
declarator = initializer
Notice the lines I use bold, type-specifier are keywords like int
, char
or void
, etc. type-qualifier are keywords like const
volatile
etc.
According to the standard, declaration-specifiers are defined recursively, that's why const int i
and int const i
are both valid:
int const i;
// | |
//type-specifier type-qualifier
// \______________/
// |
// declaration-specifier
const int i;
// | |
// | type-specifier
// | |
//type-qualifier declaration-specifier
// \__________________/
// |
// declaration-specifier