Я объявил переменную я в temp2.h extern i;
, который содержит только один над линией и сделал еще один файл temp3.cпредупреждение в экстерном декларации
#include<stdio.h>
#include<temp2.h>
int main()
{
extern i;
i=6;
printf("The i is %d",i);
}
Когда я собирал выше как cc -I ./ temp3.c
я получил следующее ошибки
/tmp/ccJcwZyy.o: In function `main':
temp3.c:(.text+0x6): undefined reference to `i'
temp3.c:(.text+0x10): undefined reference to `i'
collect2: ld returned 1 exit status
Я объявил extern в temp3.c выше, как указано в KR стр. 33, как я упоминал выше. я попробовал другой путь для temp3.c с одинаковым заголовком файла temp2.h
#include<stdio.h>
#include<temp2.h>
int main()
{
i=6;
printf("The i is %d",i);
}
и составил его cc -I ./ temp3.c
и получил следующие ошибки
/tmp/ccZZyGsL.o: In function `main':
temp3.c:(.text+0x6): undefined reference to `i'
temp3.c:(.text+0x10): undefined reference to `i'
collect2: ld returned 1 exit status
Я также попытался
#include<stdio.h>
#include<temp2.h>
int main()
{
extern i=6;
printf("The i is %d",i);
}
составлен этот один
cc -I ./ temp3.c
получил ту же ошибку, как в посте 1
temp3.c: In function ‘main’:
temp3.c:5: error: ‘i’ has both ‘extern’ and initializer
Так что я пытался по крайней мере 3 различных способа использования ехЬегп, но не из них работали.
Я хочу, чтобы эта переменная i была доступна и во многих других файлах. Что я буду делать, а значение, которое будет изменено в одном файле любым вызовом функции, тогда другой модуль или c-программа, которая может быть использована, должна получать измененное значение . Так что я хочу, чтобы переменная была глобальной для всех модулей. До вашего сообщения я не знал, как работает extern. Я думал, что extern - это способ сделать переменную глобальную. – 2010-11-25 07:33:19