如果我继续声明,size_t为什么不抱怨?

时间:2019-09-29 01:20:20

标签: c

如何允许我在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;
}

是否应该在第6行重新声明size_t会引发错误,就像我要重新声明int idx一样?

1 个答案:

答案 0 :(得分:2)

当您在两个不同的作用域中定义具有给定名称的变量时,实际上是在定义两个具有相同名称的独立变量,而内部作用域中的变量掩盖了外部范围。这是完全合法的。

但是,如果您尝试在文件作用域之外的相同作用域中定义两个具有相同名称​​的变量,则会出现错误。在文件范围内,您可能有多个声明,但只有一个定义,即,只有其中一个可以初始化变量。