Одно из различий между C и C ++ состоит в том, что в C ++ объект const int
является константой , т. Е. Его можно использовать для формирования константных выражений .В C, с другой стороны, объект const int
вообще не является константой (это больше похоже на «неизменяемую переменную »).
Между тем, размер массива для массивов области видимости файла вC должен быть константным выражением , поэтому ваш const int
объект не работает в этой роли.(Кстати, это означает, что ваш код будет прекрасно компилироваться как C ++, но не будет компилироваться как C).
В языке C для определения именованных констант вы должны использовать либо #define
, либо перечисления.В вашем конкретном случае это можно сделать следующим образом:
#define NAMESIZE 40
#define ADDRSIZE 80
PS Если вы замените массивы файловой области на локальные массивы, ваш код C будет скомпилирован как есть, то есть с const int
объектами в качестве размеров массива,потому что современный C (ANSI C99) поддерживает массивы переменной длины (VLA) в локальной области видимости.(И ваши массивы будут VLA в этом случае).В более старых версиях C (например, ANSI C89 / 90) код не будет компилироваться даже с локальными массивами.