головолмка по с, задачка для тренировки мозга |
Здравствуйте, гость ( Вход | Регистрация )
головолмка по с, задачка для тренировки мозга |
kwisp |
13.5.2009, 14:42
Сообщение
#1
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
соберите и посмотрите что выходит
Раскрывающийся текст
|
|
|
Litkevich Yuriy |
15.5.2009, 16:48
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
BRE |
15.5.2009, 17:29
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
к стати сказать, а уменя компиллер пишит предупреждения относительно аргументов функции main. И я никогда не видел, что бы их было три штуки. Это соответствует стандарту? По стандарту C очень "свободно" относиться к аргументам функций. Вот пример: Файл a.c
Файл b.c
Компилируем и получаем работающую программу. Т.е. компилятор обрабатывая исходник a.c сгенерирует код, который положит два числа на стек и вызовет функция func. Что там эта функция будет делать и какие значения брать со стека ему все равно. Как только эта функция отработает, следующий код снимит два числа со стека. Адрес функции func компилятор еще не знает, его настроит линкер при сборке объектников. main это обычная функция, которая вызывается из специального кода CRT, после подготовки программы к работе. Т.е. операционка передает управление на точку входа кода CRT, он настраивает что нужно (например, подготавливает аргументы командной строки), потом в стек кладется количество аргументов и указатель на массив строк параметров и делается call _main. В том-то и дело, что НЕ собирается, и компилятор не предупреждает, а сообщает об ошибке. Вот это и не устраивает. Когда ты компилятору говоришь трактовать предупреждения как ошибки он это и делает, но это проблемма не языка С, а самого компилятора. По стандарту С ты можешь не указывать явно тип возвращаемого значения у функции и по стандарту он будет трактоваться как int. Компиляторы предупреждают об этом, именно предупреждают. Если завтра выйдет компилятор, который будет через каждый час работы выдавать предупреждение "Программист, пойди отдохни, не смотри в монитор", и ты ему скажешь все предупреждения расценивать как ошибки, то это будет проблемма компилятора, а не языка программирования. |
|
|
Текстовая версия | Сейчас: 28.1.2025, 10:31 |