Модератор: Модераторы разделов
adav84
Сообщения: 41
Сообщение
adav84 » 15.09.2011 05:17
y.c:
x.c:
Код: Выделить всё
#include <stdio.h>
extern char *p[];
int main(){
printf("%s\n%s\n", p[0], p[1]);
return 0;
}
пробую скомпилить:
Код: Выделить всё
[adav@localhost test]$ gcc y.c x.c
/tmp/ccXlJFzX.o: In function `main':
x.c:(.text+0xb): undefined reference to `p'
x.c:(.text+0x11): undefined reference to `p'
collect2: ld returned 1 exit status
[adav@localhost test]$
если убираю static в первом файле, все работает. но этот символ должен быть static, это от меня не зависит!
Римляне, сограждане, друзья! ЧЯДНТ?
adav84
Сообщения: 41
Сообщение
adav84 » 15.09.2011 05:29
Код: Выделить всё
[adav@localhost test]$ gcc -c x.c y.c
[adav@localhost test]$ nm x.o y.o
x.o:
00000000 T main
U p
U printf
y.o:
00000000 d p
???
/dev/random
Администратор
Сообщения: 5410
ОС: Gentoo
Сообщение
/dev/random » 15.09.2011 06:12
Ключевое слово static, указанное вне функции, означает "невидимый извне".
adav84
Сообщения: 41
Сообщение
adav84 » 15.09.2011 08:05
хм-м, надо же. ну что-ж, невидимый, так невидимый (я уж думал, у меня руки кривые.... но раз так должно быть.....)
z.c:
x.c:
Код: Выделить всё
#include <stdio.h>
extern char **pp;
int main(){
printf("%s\n%s\n", pp[0], pp[1]);
return 0;
}
Код: Выделить всё
[adav@localhost test]$ gcc x.c z.c
[adav@localhost test]$ ./a.out
abc
def
[adav@localhost test]$
upd.: хотя не уверен насчет "чистоты".... (совместимы ли указатели на объекты с разными storage class'ами..... но -Wall молчит)