LINUX.ORG.RU

Ошибки GCC без загадок


0

0

Порой совершенно невозможно понять почему GCC ругается на в общем-то правильный код, а сам текст ошибки никак не проясняет ситуацию. Страница, на которую указывает идущая следом ссылка, даёт объяснение подобным загадкам.

>>> Подробности

Исправил заголовок, написав вместо "по-русски" "без загадок" потому что в твоём варианте заголовок, по-моему, вводит в заблуждение.

anonymous_incognito ★★★★★
()

Да и так ясно, что пионеры и школьники его писали.

anonymous
()

> Порой совершенно невозможно понять почему GCC ругается на в общем-то правильный код,

Так "в общем-то" или "правильный"? Я, конечно, понимаю - новостные роботы по ссылкам не ходят, даже если сами их и приводят.

anonymous
()

помниться mandriva хотела сделать отчет об ошибках в GCC сделать более совершенной. никто не вкурсе чем это кончилось?

soko1 ★★★★★
()
Ответ на: комментарий от anonymous

>Warning message: Control reaches the end of a non-void function.

>There is a way to reach the end of a non-void function without returning something. Add a final return at the end of the function to solve this.

Мдаа... и чего тут не понятно.. ведь ясно "по-русски" написано!!! >%E

Быдлокодерам жабы уже мало?

ps: по ссылке не увидел ничего интересного. Какое вообще отношение к тематике лора имеет незнание английского языка. :?

anonymous
()

Жаль, что там ничего не сказано о том, как избавиться от "warning: dereferencing type-punned pointer will break strict-aliasing rules" при компиляции с -ansi или -std=c99 :-(

И похоже этого не знает вообще никто (гуглил очень долго), т.к. это древняя проблема с time_t и int типами (например, при printf time_t типа).

saper ★★★★★
()
Ответ на: комментарий от generatorglukoff

>Кернигану+Ритчи и Страструпу.

Эт да, хорошо с них начинать. Такая связочка замечательно моск на место ставит. 8)

anonymous
()

Фигня какая-то а не страничка...

у g++ бывают интереснее ошибки особено с шаблонами, а все что приведено по ссылке тривиально :(

незач0т вобщим

libc
()
Ответ на: комментарий от libc

Создателям сайта с ошибками надо подучить С++. Впрочем они как раз в процессе компиляции демок для QT это и делают

Grindz
()
Ответ на: комментарий от anonymous

> Так "в общем-то" или "правильный"?

Исправте в новости ошибку - верно писать так:

/на в общем-то правильный код,/на совершенно неправильный код,/

Spectr ★★★
()


мнда, сиё откровение конечно сильно, тут спору нет :-/
главное, оригинально и свежо..

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от saper

> И похоже этого не знает вообще никто (гуглил очень долго), т.к. это древняя проблема с time_t и int типами

Да нет вроде такой проблемы.. Только не забывай, что time_t это не int а long.

anonymous
()
Ответ на: комментарий от soko1

> помниться mandriva хотела сделать отчет об ошибках в GCC сделать более совершенной. никто не вкурсе чем это кончилось?

Мандрива закончилась не очень хорошо :)

anonymous
()
Ответ на: комментарий от generatorglukoff

> ацтой. лучче людей сразу отсылать к Кернигану+Ритчи и Страструпу.

лучше Липпман -> Страуструп -> K&R -> Керниган и Пайк -> Александреску имхо.

anonymous
()

нормальные там вполне сообщения. что за гонево?

daaaad
()
Ответ на: комментарий от anonymous

> Да нет вроде такой проблемы.. Только не забывай, что time_t это не int а long.

sic! Не знал :( Смотрел много cvs проектов, в которых были подобные ошибки, там код вообще переписывали так, чтобы этих типов не было. Странно.

saper ★★★★★
()

А бывает такая фигня - вроде все отлично, никаких ошибок, а пишет что-то типа "error stray тряляля on program" (конечно, иногда пишет и по делу, а вот иногда и не поймешь).
Ошибок в тексте _НЕ_БЫЛО_. (Пропускал даже через splint)
А потом просто пройдет время какое-то, и программа компилируется, с тем же самым текстом, без изменений.
Вот такие вот дела :-/
Несколько раз так уже было.

Danmer ★★
()
Ответ на: комментарий от Danmer

> А бывает такая фигня - вроде все отлично, никаких ошибок, а пишет что-то типа "error stray тряляля on program"

Разгон убрать, погонять memtest86 пару суток, о результатах доложить.

anonymous
()

Разгоны не делал и не собираюсь, 2е суток на мемтест жалко, да и ну иво нафиг этот гцц, спать пора уже %)

Danmer ★★
()
Ответ на: комментарий от anonymous

Учичся по Страуструпу. А кто такой Александреску? Только пожалуйста без наездов - уже не в первом обсуждении пробегает эта фамилия. Погуглить конечно могу, но ввиду того, что на С++ уже давно не програмирую (да и особенно не хочется как-то) хотелось бы от людей знающих услышать чем он лучше или о других причинах по которым стоило бы это (что именно кстати?) почитать. Спасибо.

alebu
()
Ответ на: комментарий от Danmer

> Ошибок в тексте _НЕ_БЫЛО_. (Пропускал даже через splint)

была подобная фигня - как я помню, если копировал кусок кода из одного файла в другой, при этом переписывание кода слово в слово вместо копирования исправляло ситуацию. Бред, конечно - но было такое.

Фиг его знает, может, ему какие-то переносы строк не нравились...

Spectr ★★★
()
Ответ на: комментарий от generatorglukoff

>лучче людей сразу отсылать к Кернигану+Ритчи и Страструпу.

А Страус Трупп здесь причём?

Всех к Гослингу отсылать, отчёты javac вкуривать!

iZEN ★★★★★
()
Ответ на: комментарий от alebu

> А кто такой Александреску?

пишет книжонки по С++ из разряда "100 способов подрочить, если руки растут из жоппы"

dilmah ★★★★★
()

Скажем так. Если компилишь собственный код, то по номеру строки, где у GCC вышел окончательный затык, всегда быстро и легко находится причина ошибки. Если же собираешь чужой - то это да.... Это никакие сообщения не помогут. Надо просто выкурить столько же, сколько афффтар кода. А торчки со стажем способны заблудиться и в собственном коде.

anonymous
()
Ответ на: комментарий от Spectr

> Фиг его знает, может, ему какие-то переносы строк не нравились...

А это вполне может быть. Меньше надо чужой код тырить, помогает :)

anonymous
()
Ответ на: комментарий от anonymous_incognito

правь дальше заголовок, а то первое впечатление, что ошибки в ГЦЦ, а не программах

anonymous
()
Ответ на: комментарий от anonymous

time_t -- это не int и не long, а time_t. А что оно там на самом деле -- бог весть. Например, вполне реальный вариант long long.

anonymous
()
Ответ на: комментарий от anonymous

> time_t -- это не int и не long, а time_t. > А что оно там на самом деле -- бог весть. > Например, вполне реальный вариант long long.

AFAIK, это именно long int, aka uint32_t

anonymous
()
Ответ на: комментарий от anonymous

> AFAIK, это именно long int, aka uint32_t

uint32_t - это обычный unsigned int на 32-битной платформе.

mv ★★★★★
()
Ответ на: комментарий от eXOR

> По моему все перечисленные ошибки вполне очевидны из описания?

Таки да.

Dselect ★★★
()
Ответ на: комментарий от anonymous

>Надо просто выкурить столько же, сколько афффтар кода. А торчки со стажем способны заблудиться и в собственном коде.

+1 За что я люблю LOR

anonymous
()
Ответ на: комментарий от saper

> Жаль, что там ничего не сказано о том, как избавиться от "warning: dereferencing type-punned pointer will break strict-aliasing rules" при компиляции с -ansi или -std=c99 :-( Надо всего лишь передать параметр -fno-strict-aliasing при компиляции этого файла.

anonymous
()

Попадалась мне книжка по С, где на первой же странице
на полном серьёзе:
  main(){
    printf("Hello world!\n");
  }
Одна ошибка, два существенных и один несущественный недочёт... Кто по той книжке учился, будет ловить от gcc "странные сообщения".
А уж сколько писка стояло, когда свежевыпущенный gcc4 отказывался компилировать старую ересь...

const86 ★★★★★
()
Ответ на: комментарий от Spectr

В msvs 2003 была такая проблема, но там компайлер вообще падал вместо того чтобы писать сообщение об ошибке :) А вот чтоб gcc себя так вел не сталкивался.

Reset ★★★★★
()
Ответ на: комментарий от Danmer

Чюдеса ты какие-то рассказываешь. Скорее всего железо виновато.

Reset ★★★★★
()
Ответ на: комментарий от anonymous

>Жаль, что там ничего не сказано о том, как избавиться от "warning: dereferencing type-punned pointer will break strict-aliasing rules"

жаль что gcc не умеет заменять кривой код на нормальный

daaaad
()
Ответ на: комментарий от Reset

> А где тут ошибка? В С89 так можно писать, gcc4 нормально компилирует этот код.

"Можно" не значит "нужно". Где return ...; в конце функции, которая не-void возвращает? А отсутствие собственно "int" - это попытка сэкономить 4 байта на винчестере? Для вывода строки есть puts, printf для другого, и про неуместное или необдуманное использование printf давно говорилось. C - очень гибкий язык, дающий программисту огромную свободу, но это не значит, что этой свободой надо испытывать компилятор и наказывать тех, кто будет читать программу.

Замечение о gcc4 было не про этот книжный пример. Посмотрите, например, на qemu...

const86 ★★★★★
()
Ответ на: комментарий от const86

> Для вывода строки есть puts, printf для другого, и про неуместное или необдуманное использование printf давно говорилось.

И что же там говорилось? Чем страшно использование printf в данном конкретном случае?

anonymous
()
Ответ на: комментарий от const86

> Одна ошибка, два существенных и один несущественный недочёт...

А где ошибка? Только три несущественных недочета. gcc скомпилировал код без единого предупреждения.

eugine_kosenko ★★★
()
Ответ на: комментарий от eugine_kosenko

kavs@kavs-desktop:~$ cc -Wall 1.c -o 1
1.c:1: warning: return type defaults to ‘int’
1.c: In function ‘main’:
1.c:2: warning: implicit declaration of function ‘printf’
1.c:2: warning: incompatible implicit declaration of built-in function ‘printf’
1.c:3: warning: control reaches end of non-void function

Таки не одлного предупреждения? gcc-4.1.2

kavs@kavs-desktop:~$ cc 1.c -o 1
1.c: In function ‘main’:
1.c:2: warning: incompatible implicit declaration of built-in function ‘printf’

Без -Wall, как видите, тоже есть.

kavs
()
Ответ на: комментарий от const86

Тогда все претензии к K&R в их книге код написан в таком стиле. А если взять того же K&R но скажем не "язык Си", а "Unix programming environment" дык там код в этом отношении еще хуже :)

А по какой книге учить Си кроме как не по K&R? По Шилдту чтоль?

Reset ★★★★★
()
Ответ на: комментарий от Reset

> А по какой книге учить Си кроме как не по K&R? По Шилдту чтоль?

Судя по справочнику Шилдта, который стоит у меня на полке, этот дядя плохому не научит. А вообще-то, книжки по программированию стоит рассматривать как повод для размышления, а не как источник Истинного Знания.

const86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.