Теперь, из того, что я понимаю, extern
в объявлении name[]
сообщает компилятору, что его определение находится где-то в другом месте (в моей программе я определил его ниже той части, где я ее использовал). Но почему тогда существует другое Последствия для strlen()
и sizeof
? strlen()
работает нормально, но для sizeof()
я получаю ошибку:Почему отсутствие индекса массива в «extern char name []» не влияет на strlen (name), но вызывает ошибку для sizeof (name)?
invalid application of 'sizeof' to incomplete type 'char[]' |
Вот моя программа:
#include<stdio.h>
#include<string.h>
extern char name[];
int main()
{
printf("%d,%d",strlen(name),sizeof(name));
}
char name[]="Bryan";
//char name[6]="Bryan"; //Neither of these make sizeof work
Я пытался урезонить его, исходя из моего понимания extern
ключевого слова, но я ударил узкое место. Поэтому, пожалуйста, дайте свои ответы.
Просто убедитесь, что вы не «обманываете» компилятор, используя один размер в декларации extern, а другой в определении фактической переменной - это приведет к «интересным» проблемам. –