C 为什么';如果我不断重复声明,你不会抱怨吗?
如何允许我在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")
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。它没有任何“抱怨”的权力,但计算机有。但这里没有什么可抱怨的。