головолмка по с, задачка для тренировки мозга |
Здравствуйте, гость ( Вход | Регистрация )
головолмка по с, задачка для тренировки мозга |
Влад |
15.5.2009, 9:37
Сообщение
#21
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
Хм, но ведь волшебные ключики -pedantic и -pedantic-errors ты не указал, не так ли?
|
|
|
kwisp |
15.5.2009, 10:23
Сообщение
#22
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
не указал это верно.
вот сейчас указал и gcc3 и gcc4 все равно без ошибок и предупреждений собрал Сообщение отредактировал kwisp - 15.5.2009, 10:25 |
|
|
Влад |
15.5.2009, 15:25
Сообщение
#23
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
Гм. Любопытно...... Где ж собака то порылась?
Раскрывающийся текст [vladimir@HOME sources]$ gcc --version gcc (GCC) 4.3.0 20080428 (ASPLinux 4.3.0- Copyright © 2008 Free Software Foundation, Inc. Это свободно распространяемое программное обеспечение. Условия копирования приведены в исходных текстах. Без гарантии каких-либо качеств, включая коммерческую ценность и применимость для каких-либо целей. [vladimir@HOME sources]$ gcc -std=c99 -pedantic-errors quine.c -o quine quine.c:4: ошибка: по умолчанию возвращаемый тип функции - ‘int’ [vladimir@HOME sources]$ |
|
|
BRE |
15.5.2009, 15:35
Сообщение
#24
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
Влад |
15.5.2009, 16:29
Сообщение
#25
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
Ну, это неспортивно Скомпилировать и собрать, изменив исходный код, я могу и так. А вот не изменяя исходный код ни на чуть-чуть?!
|
|
|
BRE |
15.5.2009, 16:34
Сообщение
#26
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Ну, это неспортивно Скомпилировать и собрать, изменив исходный код, я могу и так. А вот не изменяя исходный код ни на чуть-чуть?! Так он и так собирается. Компилятор предупреждает, что не указан тип возвращаемого значения у функции и он будет рассматривать его как int, кстати по стандарту C это нормально. Что тебя не устраивает в коде? Программа собирается и главное работает. Нормальный валидный код. Нечитаемо, но этого и добивался автор. Сообщение отредактировал BRE - 15.5.2009, 16:35 |
|
|
Litkevich Yuriy |
15.5.2009, 16:48
Сообщение
#27
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Влад |
15.5.2009, 17:08
Сообщение
#28
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
Так он и так собирается. Компилятор предупреждает, что не указан тип возвращаемого значения у функции и он будет рассматривать его как int, кстати по стандарту C это нормально. Что тебя не устраивает в коде? Программа собирается и главное работает. Нормальный валидный код. Нечитаемо, но этого и добивался автор. В том-то и дело, что НЕ собирается, и компилятор не предупреждает, а сообщает об ошибке. Вот это и не устраивает. Кстати, другие протестированные мною компиляторы, за исключением BCC 5.5, тоже сообщают об ошибках и отказываются собирать. Один только BCC проглотил не поперхнувшись. Вот, например, что заявляет MSVC++ 2005: Цитата .... : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ========== Перестроение всех: успешно: 0, с ошибками: 1, пропущено: 0 ========== Это соответствует стандарту? Нет. |
|
|
BRE |
15.5.2009, 17:29
Сообщение
#29
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
к стати сказать, а уменя компиллер пишит предупреждения относительно аргументов функции main. И я никогда не видел, что бы их было три штуки. Это соответствует стандарту? По стандарту C очень "свободно" относиться к аргументам функций. Вот пример: Файл a.c
Файл b.c
Компилируем и получаем работающую программу. Т.е. компилятор обрабатывая исходник a.c сгенерирует код, который положит два числа на стек и вызовет функция func. Что там эта функция будет делать и какие значения брать со стека ему все равно. Как только эта функция отработает, следующий код снимит два числа со стека. Адрес функции func компилятор еще не знает, его настроит линкер при сборке объектников. main это обычная функция, которая вызывается из специального кода CRT, после подготовки программы к работе. Т.е. операционка передает управление на точку входа кода CRT, он настраивает что нужно (например, подготавливает аргументы командной строки), потом в стек кладется количество аргументов и указатель на массив строк параметров и делается call _main. В том-то и дело, что НЕ собирается, и компилятор не предупреждает, а сообщает об ошибке. Вот это и не устраивает. Когда ты компилятору говоришь трактовать предупреждения как ошибки он это и делает, но это проблемма не языка С, а самого компилятора. По стандарту С ты можешь не указывать явно тип возвращаемого значения у функции и по стандарту он будет трактоваться как int. Компиляторы предупреждают об этом, именно предупреждают. Если завтра выйдет компилятор, который будет через каждый час работы выдавать предупреждение "Программист, пойди отдохни, не смотри в монитор", и ты ему скажешь все предупреждения расценивать как ошибки, то это будет проблемма компилятора, а не языка программирования. |
|
|
Kagami |
15.5.2009, 19:12
Сообщение
#30
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Вот, например, что заявляет MSVC++ 2005: Цитата .... : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ========== Перестроение всех: успешно: 0, с ошибками: 1, пропущено: 0 ========== Английским по белому написано - С++ не поддерживает int по умолчанию.. Но программа-то на С написана. Ты не тем компилятором компилируешь |
|
|
Текстовая версия | Сейчас: 15.1.2025, 11:18 |