zltigo 1 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Вы из тех, кто считает себя слишком опытным, чтоб допустить свою неправоту, да? Своим постом "Гуглите, читайте, пробуйте". Вы не смогли не то, что "доказать", а даже хоть как-то попытаться обосновать "правоту" своего утверждения: int function(); и int function(void); это в си совсем не одно и то же ... Первый вариант позволяет вызвать функцию с любым числом аргументов. ...сейчас устаревшее, но из стандарта не удалённое. Мне только оставалось согласиться c Вашим провалом, что я и сделал. Так что "дискуссия" с Вами завершена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Упёртый. Ясно. А ведь убедиться, что я прав, так легко... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Упёртый. Ясно. А ведь убедиться, что я прав, так легко... Ахаха! Вы такие смешные В интернете кто-то неправ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба У zltigo много безапелляционных утверждений, обычно строящихся по схеме "никто не может быть прав, если я думаю иначе", однако в этом конкретном случае хотелось бы больше деталей. Стандарт языка С достоверный с ИСО сайта фиг достанешь, он там за деньги, а что находиться нахаляву - перепечатки и трактования. Косвенно я нашел 2 вещи, что вроде бы в С89 было function() - объявление функции возвращающей int и принимающей любое число параметров, но там и нельзя было написать function(void). А с С99 вроде бы когда появилось function(void) уже список переменных параметров задать даже через function(...) нельзя, нужен хотя бы 1 формальный параметр function(double p, ...) Но это перепечатки и объяснения друг другу, а вот реально в документе АНСИ я что-то найти правды не смог, даже подлинного документа не смог найти.... Кто-то внесет ясность? желательно со ссылкой на ревизию стандарта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба Стандарт языка С достоверный с ИСО сайта фиг достанешь... Это собственно незачем и делать. Комитет, кроме собственно стандарта предназначенного для разработчиков компиляторов, выпустил так-же "Rationale" , AKA руководство для пользователей. то вроде бы в С89 было function() - объявление функции возвращающей int и принимающей любое число параметров, но там и нельзя было написать function(void). Написание function(void) именно тогда и было введено, и именно в противовес function(), которое трактовалось иногда в отсутствие стандартов, производителями компиляторов подтянувших фичи C++, и как то, что об агрументах ничего неизвесто и позволяло таким образом тупо посылать компилятор нафиг с его контролем. То есть получался не прототип функции, а отключалка контроля. C появлением первого-же Стандарта языка, появились и прототипы, и соответственно официальный способ описать прототип функции без параметров - function(void). А не кем-то, когда-то используемый на свое усмотрение для этой цели function(). А function(); является соответственно ошибочным прототипом, на который компитяторы ругаются по умолчанию предупреждением (для обеспечения совместимости с разнообразными достандартными исходниками), как по той-же причине ругаются предупреждением, а не ошибкой, на отсутствие прототипов, котрых так-же не было у K&R. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба Молодец, нашёл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба Молодец, нашёл. Повторяю: Мне только оставалось согласиться c Вашим провалом, что я и сделал. Так что "дискуссия" с Вами завершена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба Как то вяло все происходит, учитесь у профи :) https://scontent-ams2-1.xx.fbcdn.net/hphoto...amp;oe=56A4AFCB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба Как то вяло все происходит Понять бы, вообще, суть текущей переписки. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 11 октября, 2015 Опубликовано 11 октября, 2015 (изменено) · Жалоба Как откусить яблоко. Сериал. Многоходовка. IAR на прототип с пустыми скобками не ругается. И правильно делает. Если считает их однозначно пустым списком. А бэк совместимость логичнее задавать опцией компиляции. По поводу пустых скобок в for() ошибся, т.к. никогда его не использую, он пишется for(;;). function(void) Это криво. Неявный int тоже криво. void, как и другие стандартные типы, при встрече в коде является началом объявления типа объекта. В пустом списке параметров нет ни одного объекта. Изменено 11 октября, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 11 октября, 2015 Опубликовано 11 октября, 2015 (изменено) · Жалоба Мне только оставалось согласиться c Вашим провалом, что я и сделал. Ну то есть что вы сначала оспаривали мои слова, а потом с ними согласились, это мой провал? Ну ок, "гуру" меня размазал. Это криво. Неявный int тоже криво. Неявное объявление функции при первом использовании - вот, наверное, самое отвратительное в сях. Изменено 11 октября, 2015 пользователем den_po Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба Ну то есть что вы сначала оспаривали мои слова, а потом с ними согласились, это мой провал? Ну ок, "гуру" меня размазал. ... Не утруждайтесь. Это такой стиль. Или как принято говорить: двойные стандарты. Когда я в этой теме просил "гуру" дать ссылки на подтверждение своих голословных заявлений (http://electronix.ru/forum/index.php?s=&showtopic=130098&view=findpost&p=1361284) , то "гуру" не соизволил ничего ответить по существу дела. Вместо этого "гуру" зачем-то приплёл не относящийся к делу пустой "for(;;)" прекрасно понимая что это совсем не эквивалент do-while-zero конструкции. Забавно получилось, что "гуру" вместо признания своей ошибки начал загонять себя ещё глубже, ссылаясь на "творца Си" Денниса Ритчи. Однако, "гуру" забыл что в сеть попали исходники самых первых трансляторов. По исходникам становится очевидно, что конструкция for вообще отсутствовала в первом компиляторе а для циклов "творец" использовал while. P.S. Будьте добрее. Всем хороших выходных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба Ну то есть что вы сначала оспаривали мои слова, а потом с ними согласились С Вашей глупостью http://electronix.ru/forum/index.php?showt...t&p=1371217 согласиться не могу. То, что Вы сейчас пытаетесь выкручиваться делая вид, что якобы писали о чем-то другом, тоже глупо :(. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба C появлением первого-же Стандарта языка, появились и прототипы, и соответственно официальный способ описать прототип функции без параметров - function(void). мне кажется вы ошибаетесь.... даже вот человек пишет void, как и другие стандартные типы, при встрече в коде является началом объявления типа объекта. В пустом списке параметров нет ни одного объекта. именно это и была проблема что void это как бы тип, и его только потом расширили до пустоты то есть function(void) - это такая специальная синтетическая конструкция, и появилась она не сразу, я видел это в изменениях, то есть в каких-то ново введениях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 11 октября, 2015 Опубликовано 11 октября, 2015 · Жалоба прекрасно понимая что это совсем не эквивалент do-while-zero конструкции Вам просто следовало-бы наконец понять, что "do-while-zero" является сама по себе ненужным трюком и еще в каких-то "эквивалентах" не нуждается. именно это и была проблема что void это как бы тип, и его только потом расширили... Давайте начнем с того, что его не когда-то "потом расширили", а именно сразу в САМОМ ПЕРВОМ СТАНДАРТЕ языка Си, как только он в Си а не в ++ появился. До первого стандарта было только неформальное описание языка K&R и ничего более. До первого стандарта не было вообще прототипов функций, как и void. Как только появились стандартизированные прототипы функций, появилися прототип function(void); прототипа function() не существовало ни у K&R ввиду отсутствия прототипов как таковых, ни в стандатах, где забит уже function(void). Так-что прототип function() это калька писателей компиляторов в период бесстандартности, когда подтягивали безусловно эту безусловно полезнейнейшую фичу из C++. А что Вы скажете о таком использовании void: (void)argument; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться