Почему size_t не жалуется, если я продолжаю объявлять его повторно? - PullRequest
0 голосов
/ 29 сентября 2019

Как мне разрешить делать следующее в C?

char * string;
size_t string_len;
unsigned int idx;

for (idx=0; (string=src[idx]) != NULL; idx++) {
    size_t string_len = strlen(string);
    if (!(dest[idx] = malloc(string_len + 1))) {
        perror("Failed to copy string value");
        exit (EXIT_FAILURE);
    }
    dest[idx] = string;
}

Не должно ли повторное объявление size_t в строке 6 вызвать ошибку, аналогично тому, как если бы я переопределил int idx

1 Ответ

3 голосов
/ 29 сентября 2019

Когда вы определяете переменную с заданным именем в двух разных областях, вы фактически определяете две отдельные переменные с одним и тем же именем, и одна из них во внутренней области действия маскирует одну из внешнейобъем.Это совершенно законно.

Однако вы получите ошибку, если попытаетесь определить две переменные с одинаковым именем в одной и той же области действия , отличной от области действия файла.В области видимости файла вы можете иметь несколько объявлений , но только одно определение , т.е. только одно из них может инициализировать переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...