C 为什么';如果我不断重复声明,你不会抱怨吗?

C 为什么';如果我不断重复声明,你不会抱怨吗?,c,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")

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

当您在两个不同的范围内定义一个具有给定名称的变量时,您实际上是在定义两个具有相同名称的独立变量,内部范围内的一个屏蔽了外部范围内的一个。这是完全合法的


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

当您在两个不同的范围内定义一个具有给定名称的变量时,实际上是定义了两个具有相同名称的独立变量,内部范围内的一个屏蔽了外部范围内的一个。这是完全合法的


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

您应该得到的警告是,第一个
字符串没有被使用。@user3386109您能澄清一下吗?您使用的是什么编译器?您使用什么命令行编译?你得到了什么警告?如果我没有错的话,你在不同的范围内声明了一个新的大小(大括号)。您可以尝试在该范围内重新声明int idx,它也不应该抱怨。只有在重新声明同一范围内的变量时,它才会抱怨。
size\u t
是一个typedef。它没有任何“抱怨”的权力,但计算机有。但是这里没有什么可抱怨的。你应该得到的警告是第一个
字符串没有被使用。@user3386109你能澄清一下吗?你在使用什么编译器?您使用什么命令行编译?你得到了什么警告?如果我没有错的话,你在不同的范围内声明了一个新的大小(大括号)。您可以尝试在该范围内重新声明int idx,它也不应该抱怨。只有在重新声明同一范围内的变量时,它才会抱怨。
size\u t
是一个typedef。它没有任何“抱怨”的权力,但计算机有。但这里没有什么可抱怨的。