Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> test.c:1: warning: 'foo' used but never defined, почему варнинг, а не ошибка? 
:(
    Опции темы
leniviy
Дата 8.10.2012, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: 1
Всего: 5



Привет.

test.c:
Код

    static void foo();
    
    void bar() {
        foo();
    }


Код

$ gcc -c test.c
test.c:1: warning: 'foo' used but never defined


Почему варнинг, а не ошибка? Ведь другие модули не могут использовать статик из этого модуля.


Это сообщение отредактировал(а) leniviy - 8.10.2012, 13:18
PM MAIL   Вверх
boostcoder
Дата 8.10.2012, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



в списке рассылки тебе уже все объяснили. процитируй сюда ответ. вдруг кому поможет.

PM WWW   Вверх
borisbn
Дата 8.10.2012, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135





--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Randajad
Дата 8.10.2012, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Код не полный, не понятно, на что хотел пожаловаться автор.

http://liveworkspace.org/code/0cd709688095...457530cf8ebf341
Нету никакой ошибки.
PM MAIL   Вверх
boostcoder
Дата 8.10.2012, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Randajad @  8.10.2012,  21:49 Найти цитируемый пост)
не понятно, на что хотел пожаловаться автор.

именно на то, что он написал в топике.

PM WWW   Вверх
Randajad
Дата 8.10.2012, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Выдрано из контекста.
Если он бар не вызвана ни откуда - откуда ошибка? Линкер не пожалуется. А если вызвана - должен жаловаться линкер.
И, если честно, не могу понять, почему тут ошибка.
Как максимум: undefined reference должно быть.

Это сообщение отредактировал(а) Randajad - 8.10.2012, 22:10
PM MAIL   Вверх
boostcoder
Дата 9.10.2012, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



leniviy, ты ведь сегодня был на форуме. почему ответ не процитировал?
и почему тема не отмечена как решенная?

PM WWW   Вверх
leniviy
Дата 10.10.2012, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: 1
Всего: 5



Вот, что мне там ответили:
Цитата(Oleg Endo)
The code above will generate a symbol reference to 'foo', i.e. a
function call to a non-static function.  If it is defined in some
other .o and linked together, the 'foo' from the other .o will be used.


Если функция объявлена как static, но не имплементирована, gcc считает её external.
Я считаю, это не правильно. Если програмер объявил что-то, как static, он явно не хотел, чтобы использовался символ из другого модуля.

В Visual C, кстати, это не варнинг, а ошибка.

Это сообщение отредактировал(а) leniviy - 10.10.2012, 10:16
PM MAIL   Вверх
leniviy
Дата 10.10.2012, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: 1
Всего: 5



Цитата(boostcoder @  9.10.2012,  21:54 Найти цитируемый пост)
почему тема не отмечена как решенная?

Вот ткнут меня в параграф стандарта C, где написано, что статик не обязательно статик, тогда можно считать решенным.
Ну или если они поправили это в последних версиях gcc

Это сообщение отредактировал(а) leniviy - 10.10.2012, 10:20
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.