Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

Странное предупреждение GCC - C++

04.01.2013, 23:02. Просмотров 2401. Ответов 10
Метки нет (Все метки)

В функции есть строчки и компилятор ругается на последнуюю:
C
1
2
3
4
char *p = NULL;                                                                                             
char *ptr[n/2];                                                                                             
p = strtok(s, " \t\n\b");                                                                                   
ptr[0] = (char*)calloc((strlen(p)+1), sizeof(char));
Bash
1
test.c:21:21: warning: incompatible implicit declaration of built-in function ‘calloc’ [enabled by default]
Результат функции меня удовлетворят, но хотелось бы узнать существенна ли эта ошибка? И как её устанить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2013, 23:02     Странное предупреждение GCC
Посмотрите здесь:

Некорректное ли предупреждение gcc о явно запрещенном конструкторе? - C++
Здравствуйте! У меня есть класс Uncopyable, который явно запрещает копирование. От него наследую класс, в котором есть указатели, и...

Как понимать предупреждение комилятора gcc "ISO C++ says that these are ambiguous." - C++
предупреждение: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion...

Gcc и c++ - C++
Доброго времени суток. Начну с предисловия. Я всегда писал на C++ под винду и в линукс не совался. Сейчас, я выполняю задание(тестовое) и...

gcc в c++ VS - C++
void MakeStrRef(RCString* sref,char* data){ asm("pushl %%eax\n" "call %%edx" : ...

Компиляция (gcc) - C++
Добрый вечер! После компиляции текстовый файл становится вдруг двоичным, как следствие его невозможно открыть для исправлений. Почему? ...

Глюк gcc? - C++
Компилируя программу в gcc, выводит от части неверный ответ. В code::blocks все в порядке. Как это понимать? Программа выполняет сдвиг...

gcc update - C++
как обновить gcc? Нужно качать новую версию и заново устанавливать или есть какая-то команда, чтобы сделать это?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 816
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
04.01.2013, 23:08     Странное предупреждение GCC #2
Лично у меня на этот фрагмент кода не ругается
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
04.01.2013, 23:08     Странное предупреждение GCC #3
Какие файлы инклюдишь?
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
04.01.2013, 23:10  [ТС]     Странное предупреждение GCC #4
а практически никаких)

Добавлено через 28 секунд
разобрался спасибо
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
04.01.2013, 23:11     Странное предупреждение GCC #5
Тогда используется сишное объявление по умолчанию, где любая функция возвращает int. Нужно подключить <cstdlib>.
Croessmah
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 816
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
04.01.2013, 23:11     Странное предупреждение GCC #6
Цитата Сообщение от xtorne21st Посмотреть сообщение
разобрался спасибо
Ну так расскажите, может кому пригодится
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
04.01.2013, 23:16  [ТС]     Странное предупреждение GCC #7
Да вот, человек уже всё объяснил.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
04.01.2013, 23:20     Странное предупреждение GCC #8
На буржуйской вики как раз про это написано
http://en.wikipedia.org/wiki/C_dynamic_memory_allocationAdding the cast may mask failure to include the header stdlib.h, in which the prototype for malloc is found.[8][9] In the absence of a prototype for malloc, the standard requires that the C compiler assume malloc returns an int. If there is no cast, a warning is issued when this integer is assigned to the pointer; however, with the cast, this warning is not produced, hiding a bug. On certain architectures and data models (such as LP64 on 64-bit systems, where long and pointers are 64-bit and int is 32-bit), this error can actually result in undefined behaviour, as the implicitly declared malloc returns a 32-bit value whereas the actually defined function returns a 64-bit value. Depending on calling conventions and memory layout, this may result in stack smashing. This issue is not present in modern compilers, as they uniformly produce warnings that an undeclared function has been used, so a warning will still appear. For example, GCC's default behaviour is to show a warning that reads "incompatible implicit declaration of built-in function" regardless of whether the cast is present or not.
Evg
Эксперт CАвтор FAQ
17544 / 5782 / 370
Регистрация: 30.03.2009
Сообщений: 15,927
Записей в блоге: 26
04.01.2013, 23:57     Странное предупреждение GCC #9
Смысл сей фичи в том, что в режиме -fbuiltin (который включен по умолчанию) компилятор gcc трактует большинство стандартных функций как builtin (т.е. встроенная в язык функция). В данном примере gcc пытается трактовать calloc как __builtin_calloc, но обламывается, видя, что прототип функции calloc не совпадает с прототипом __builtin_calloc. Почему не совпадает - описано выше.

Конкретно для calloc'а сия замена скорее всего не даёт ничего принципиального с точки зрения производительности. Скорее всего оптимизатор начинает понимать, что указатель, возвращённый calloc'ом является уникальным и не конфликтует ни с одним из существующих в точке вызова указателей. Но, например, для функции fabs замена на __builtin_fabs даст прирост в производительности, т.к. на большинстве архитектур __builtin_fabs раскроется в одну аппаратную операцию (а это гораздо эффективнее, чем вызов функции)
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
05.01.2013, 00:10  [ТС]     Странное предупреждение GCC #10
Хотя, как тут написано, что при приведении к типу - сообщения нет, у меня gcc 4.7 всё-равно выдаёт предупреждение.

Добавлено через 7 минут
До конца не дочитал, что на современные компиляторы не распространяется...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2013, 12:07     Странное предупреждение GCC
Еще ссылки по теме:

gcc компиляция - C++
Проблема возникла при компиляции проекта code::block. При build and run все работает, в папке bin проекта появляется .exe Но...

gcc VS DEV-C++ 4.9.9.2 - C++
Люди!! Срочно нужны знающие люди по данному вопросу.Только сейчас узнал,что вся практика будет в gcc...... Какие отличия вообще между ними...

Компиляция gcc - C++
Подскажите как в VS скомпилировать программу с помощью компилятора gcc

g++/gcc не компилирует - C++
есть С++ код #include &lt;iostream&gt; int main(){ std::cout &lt;&lt; &quot;hello ,world!&quot;; } запускаю компилятор и он ничего не...

компиляция gcc и MSVC - C++
Привет всем. Объясните, почему один и тот же код #include &quot;stdafx.h&quot; #include &lt;vector&gt; #include &lt;iostream&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17544 / 5782 / 370
Регистрация: 30.03.2009
Сообщений: 15,927
Записей в блоге: 26
05.01.2013, 12:07     Странное предупреждение GCC #11
Цитата Сообщение от xtorne21st Посмотреть сообщение
Хотя, как тут написано, что при приведении к типу - сообщения нет, у меня gcc 4.7 всё-равно выдаёт предупреждение.
От того, что есть приведение типа, прототип функции другим не становится. А предупреждение касается именно прототипа функции, а не дальнейшей судьбы результата вызова
Yandex
Объявления
05.01.2013, 12:07     Странное предупреждение GCC
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru