|
|
  |
Косяк у Кейла, Препроцессор не следит за скобками |
|
|
|
Oct 8 2015, 13:31
|
Частый гость
 
Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315

|
Цитата(GetSmart @ Oct 8 2015, 14:55)  На тему нововведений хочется прояснить ещё один любопытный нюанс. В интернете написано, что до стандарта 89 года пустой список аргументов функций объявлялся пустыми скобками. А что стали обозначать пустые скобки со стандарта 89 года, там написано?
|
|
|
|
|
Oct 10 2015, 05:46
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(den_po @ Oct 8 2015, 17:31)  А что стали обозначать пустые скобки со стандарта 89 года, там написано? Видимо некорректно и неточно написал, скопипастив источник интернета. Void навязывается только в прототипах функций. Но из-за этого он допускается и во всех остальных местах объявления заголовков функций. И эта полумера/полутребование кривое вдвойне. Либо что-то важное ещё не озвучено. Golikov A. Невозможно забыть/опечататься в определении функции с её телом, а так же при её вызове, т.к. у компилятора есть вся информация для выявления ошибки. В прототипе тоже сомнительно.
Сообщение отредактировал GetSmart - Oct 10 2015, 05:51
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Oct 10 2015, 06:59
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (GetSmart @ Oct 10 2015, 08:46)  Невозможно забыть/опечататься в определении функции с её телом, Это Вы за себя говорите, или за всяких "кодеров" (не понимаюших правил хрошего тона в языке но наплодивших и продлжкющих плодить всякое) тоже? Вот что это: smart(); 1) Вызов функции; 2) Опредеоение функции; 3) Макрос; QUOTE а так же при её вызове, т.к. у компилятора есть вся информация для выявления ошибки. Нету. Как Вы не можете без void отличить быдлокодеровское определение функции с возвращаемым int от вызова функции, так и компилятор этого не может. Посему ныне требуемое определение функции: void function(void); вполне логично, void function(); нелогично, а function(); использовать нельзя, по тому, что это на самом деле, благодаря  изначально заложенной глупости, совсем другая функция: int function(void); зато, блин, оталась возможноcть писать: function(void); Проблема в том, что изменения ( изменения, а не дополнения ) в стандарте страдают полумерами  - вводя тот-же void, надо было запрешать и по умолчанию возвращаемое int. Но ведь сколько "кодеров" такое УЖЕ размножили в мириадах строк, как и дикое while(1)  . Вот и тянут
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 10 2015, 07:50
|
Частый гость
 
Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315

|
Цитата(zltigo @ Oct 10 2015, 10:59)  нелогично, а function(); использовать нельзя, по тому, что это на самом деле, благодаря  изначально заложенной глупости, совсем другая функция: int function(void); int function(); и int function(void); это в си совсем не одно и то же
|
|
|
|
|
Oct 10 2015, 15:12
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (den_po @ Oct 10 2015, 10:50)  int function(); и int function(void); это в си совсем не одно и то же Да ну! Не дайте помереть невежей - поведайте в чем-же это было раньше отличие. QUOTE (ViKo @ Oct 10 2015, 10:09)  В С99 неявный возвращаемый int убрали. А вы все старье обсуждаете. Убрали убрали так, что какой-нибудь GCC максимум предупреждение выдает, да и то подавлнное.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 10 2015, 15:40
|
Частый гость
 
Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315

|
Цитата(zltigo @ Oct 10 2015, 19:12)  Да ну! Не дайте помереть невежей - поведайте в чем-же это было раньше отличие. Отличие и сейчас есть. Первый вариант позволяет вызвать функцию с любым числом аргументов.
|
|
|
|
|
Oct 10 2015, 16:20
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(den_po @ Oct 10 2015, 19:40)  Отличие и сейчас есть. Первый вариант позволяет вызвать функцию с любым числом аргументов. В какого года стандарте это определено? int function(); На этот вариант 4-ый Кейл выдаёт варнинг - "deprecated". Ругается даже на static-прототип без void в пустом списке аргументов. zltigo void в месте возвращаемого функцией значения к делу отношения не имеет. Там void ни с чем не конфликтует. Странно только, что неявным там был int, а не отсутствие возвращаемого значения (aka void в будущем).
Сообщение отредактировал GetSmart - Oct 10 2015, 16:45
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Oct 10 2015, 17:08
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (den_po @ Oct 10 2015, 18:40)  Первый вариант позволяет вызвать функцию с любым числом аргументов. Разумеется нет. И вообще "любое" в Cи вообще не сущесвует, ибо даже funсtion(...); , если компилятор и не выдаст ошибку, как минимум бессмысленна, посему - funсtion( param, .... ); То есть не менее одного. QUOTE (GetSmart @ Oct 10 2015, 19:20)  void в месте возвращаемого функцией значения к делу отношения не имеет. Имеет, как пример полностью однозначного определения функции и когда убрали разрешенную неопределенность с возвращаемым значением, стало логичным убрать ее и в передаваемым значением.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 10 2015, 19:26
|
Частый гость
 
Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315

|
Цитата(GetSmart @ Oct 10 2015, 20:20)  В какого года стандарте это определено? С того же 89 оно упоминается. Тогда оно было "устаревающим", сейчас устаревшее, но из стандарта не удалённое. Цитата(zltigo @ Oct 10 2015, 21:08)  Разумеется нет. И вообще "любое" в Cи вообще не сущесвует, ибо даже funktion(...); , если компилятор и не выдаст ошибку, как минимум бессмысленна, посему - funktion( param, .... ); То есть не менее одного. Гуглите, читайте, пробуйте.
|
|
|
|
|
Oct 10 2015, 20:34
|
Частый гость
 
Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315

|
Цитата(zltigo @ Oct 11 2015, 00:18)  Понятно. Просто сбрехали. Вы из тех, кто считает себя слишком опытным, чтоб допустить свою неправоту, да?
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|