GetSmart 0 8 октября, 2015 Опубликовано 8 октября, 2015 (изменено) · Жалоба На тему нововведений хочется прояснить ещё один любопытный нюанс. В интернете написано, что до стандарта 89 года пустой список аргументов функций объявлялся пустыми скобками. Что и естественно, и просто в реализации компилятора. Т.к. встреча ключевого слова void (без описываемого нововведения) обозначает объявление типа. Внутри же списка аргументов из-за void появляется некоторая нестыковка. В чём был смысл нововведения? Может есть некие аналогии или другие принципы? Или боязнь пустых скобок. Хотя в for() их таки притянули за уши. Может кто-то интересовался историей эволюции или читал что-то похожее на мемуары. Изменено 8 октября, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 8 октября, 2015 Опубликовано 8 октября, 2015 · Жалоба На тему нововведений хочется прояснить ещё один любопытный нюанс. В интернете написано, что до стандарта 89 года пустой список аргументов функций объявлялся пустыми скобками. А что стали обозначать пустые скобки со стандарта 89 года, там написано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 8 октября, 2015 Опубликовано 8 октября, 2015 (изменено) · Жалоба Думаю, zltigo сказал бы: "бессмысленность". Компиляторы, по желанию своих разработчиков, могут выдать "deprecated". ---- Может быть мой вопрос как-то пересекается с прототипированием функций. В каких-то источниках акцентируются прототипы. Но ясная причина отказа от пустых скобок не обозначена. Изменено 8 октября, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 8 октября, 2015 Опубликовано 8 октября, 2015 · Жалоба думаю дань всяким чекерам, чтобы явно указать что вы не забыли параметры, а их реально не должно быть. Или чтобы отличать вызов функции от ее объявления более наглядно.... или чтобы разработчик мог явно указать что точно ничего вызывать не надо, а он ничего не забыл... резюме - для повышения читаемости и понятности кода... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 10 октября, 2015 Опубликовано 10 октября, 2015 (изменено) · Жалоба А что стали обозначать пустые скобки со стандарта 89 года, там написано? Видимо некорректно и неточно написал, скопипастив источник интернета. Void навязывается только в прототипах функций. Но из-за этого он допускается и во всех остальных местах объявления заголовков функций. И эта полумера/полутребование кривое вдвойне. Либо что-то важное ещё не озвучено. Golikov A. Невозможно забыть/опечататься в определении функции с её телом, а так же при её вызове, т.к. у компилятора есть вся информация для выявления ошибки. В прототипе тоже сомнительно. Изменено 10 октября, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Невозможно забыть/опечататься в определении функции с её телом, Это Вы за себя говорите, или за всяких "кодеров" (не понимаюших правил хрошего тона в языке но наплодивших и продлжкющих плодить всякое) тоже? Вот что это: smart(); 1) Вызов функции; 2) Опредеоение функции; 3) Макрос; а так же при её вызове, т.к. у компилятора есть вся информация для выявления ошибки. Нету. Как Вы не можете без void отличить быдлокодеровское определение функции с возвращаемым int от вызова функции, так и компилятор этого не может. Посему ныне требуемое определение функции: void function(void); вполне логично, void function(); нелогично, а function(); использовать нельзя, по тому, что это на самом деле, благодаря :( изначально заложенной глупости, совсем другая функция: int function(void); зато, блин, оталась возможноcть писать: function(void); Проблема в том, что изменения ( изменения, а не дополнения ) в стандарте страдают полумерами :( - вводя тот-же void, надо было запрешать и по умолчанию возвращаемое int. Но ведь сколько "кодеров" такое УЖЕ размножили в мириадах строк, как и дикое while(1) :(. Вот и тянут :( :( :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба В С99 неявный возвращаемый int убрали. А вы все старье обсуждаете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба нелогично, а function(); использовать нельзя, по тому, что это на самом деле, благодаря :( изначально заложенной глупости, совсем другая функция: int function(void); int function(); и int function(void); это в си совсем не одно и то же Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба int function(); и int function(void); это в си совсем не одно и то же Да ну! Не дайте помереть невежей - поведайте в чем-же это было раньше отличие. В С99 неявный возвращаемый int убрали. А вы все старье обсуждаете. Убрали убрали так, что какой-нибудь GCC максимум предупреждение выдает, да и то подавлнное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Да ну! Не дайте помереть невежей - поведайте в чем-же это было раньше отличие. Отличие и сейчас есть. Первый вариант позволяет вызвать функцию с любым числом аргументов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 10 октября, 2015 Опубликовано 10 октября, 2015 (изменено) · Жалоба Отличие и сейчас есть. Первый вариант позволяет вызвать функцию с любым числом аргументов. В какого года стандарте это определено? int function(); На этот вариант 4-ый Кейл выдаёт варнинг - "deprecated". Ругается даже на static-прототип без void в пустом списке аргументов. zltigo void в месте возвращаемого функцией значения к делу отношения не имеет. Там void ни с чем не конфликтует. Странно только, что неявным там был int, а не отсутствие возвращаемого значения (aka void в будущем). Изменено 10 октября, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Первый вариант позволяет вызвать функцию с любым числом аргументов. Разумеется нет. И вообще "любое" в Cи вообще не сущесвует, ибо даже funсtion(...); , если компилятор и не выдаст ошибку, как минимум бессмысленна, посему - funсtion( param, .... ); То есть не менее одного. void в месте возвращаемого функцией значения к делу отношения не имеет. Имеет, как пример полностью однозначного определения функции и когда убрали разрешенную неопределенность с возвращаемым значением, стало логичным убрать ее и в передаваемым значением. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба В какого года стандарте это определено? С того же 89 оно упоминается. Тогда оно было "устаревающим", сейчас устаревшее, но из стандарта не удалённое. Разумеется нет. И вообще "любое" в Cи вообще не сущесвует, ибо даже funktion(...); , если компилятор и не выдаст ошибку, как минимум бессмысленна, посему - funktion( param, .... ); То есть не менее одного. Гуглите, читайте, пробуйте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Гуглите, читайте, пробуйте. Понятно. Просто сбрехали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Понятно. Просто сбрехали. Вы из тех, кто считает себя слишком опытным, чтоб допустить свою неправоту, да? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться