реклама на сайте
подробности

 
 
18 страниц V  « < 8 9 10 11 12 > »   
Reply to this topicStart new topic
> Косяк у Кейла, Препроцессор не следит за скобками
GetSmart
сообщение Oct 8 2015, 10:55
Сообщение #136


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



На тему нововведений хочется прояснить ещё один любопытный нюанс. В интернете написано, что до стандарта 89 года пустой список аргументов функций объявлялся пустыми скобками. Что и естественно, и просто в реализации компилятора. Т.к. встреча ключевого слова void (без описываемого нововведения) обозначает объявление типа. Внутри же списка аргументов из-за void появляется некоторая нестыковка. В чём был смысл нововведения? Может есть некие аналогии или другие принципы? Или боязнь пустых скобок. Хотя в for() их таки притянули за уши. Может кто-то интересовался историей эволюции или читал что-то похожее на мемуары.

Сообщение отредактировал GetSmart - Oct 8 2015, 13:56


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
den_po
сообщение Oct 8 2015, 13:31
Сообщение #137


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



Цитата(GetSmart @ Oct 8 2015, 14:55) *
На тему нововведений хочется прояснить ещё один любопытный нюанс. В интернете написано, что до стандарта 89 года пустой список аргументов функций объявлялся пустыми скобками.

А что стали обозначать пустые скобки со стандарта 89 года, там написано?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 8 2015, 13:48
Сообщение #138


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Думаю, zltigo сказал бы: "бессмысленность".

Компиляторы, по желанию своих разработчиков, могут выдать "deprecated".

----

Может быть мой вопрос как-то пересекается с прототипированием функций. В каких-то источниках акцентируются прототипы. Но ясная причина отказа от пустых скобок не обозначена.

Сообщение отредактировал GetSmart - Oct 8 2015, 14:21


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 8 2015, 14:43
Сообщение #139


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



думаю дань всяким чекерам, чтобы явно указать что вы не забыли параметры, а их реально не должно быть. Или чтобы отличать вызов функции от ее объявления более наглядно.... или чтобы разработчик мог явно указать что точно ничего вызывать не надо, а он ничего не забыл... резюме - для повышения читаемости и понятности кода...
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 10 2015, 05:46
Сообщение #140


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(den_po @ Oct 8 2015, 17:31) *
А что стали обозначать пустые скобки со стандарта 89 года, там написано?

Видимо некорректно и неточно написал, скопипастив источник интернета. Void навязывается только в прототипах функций. Но из-за этого он допускается и во всех остальных местах объявления заголовков функций. И эта полумера/полутребование кривое вдвойне. Либо что-то важное ещё не озвучено.


Golikov A.
Невозможно забыть/опечататься в определении функции с её телом, а так же при её вызове, т.к. у компилятора есть вся информация для выявления ошибки. В прототипе тоже сомнительно.

Сообщение отредактировал GetSmart - Oct 10 2015, 05:51


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 10 2015, 06:59
Сообщение #141


Гуру
******

Группа: Свой
Сообщений: 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();
использовать нельзя, по тому, что это на самом деле, благодаря sad.gif изначально заложенной глупости, совсем другая функция:
int function(void);
зато, блин, оталась возможноcть писать:
function(void);

Проблема в том, что изменения ( изменения, а не дополнения ) в стандарте страдают полумерами sad.gif - вводя тот-же void, надо было запрешать и по умолчанию возвращаемое int. Но ведь сколько "кодеров" такое УЖЕ размножили в мириадах строк, как и дикое while(1) sad.gif. Вот и тянут sad.gif sad.gif sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 10 2015, 07:09
Сообщение #142


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



В С99 неявный возвращаемый int убрали. А вы все старье обсуждаете.
Go to the top of the page
 
+Quote Post
den_po
сообщение Oct 10 2015, 07:50
Сообщение #143


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



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

int function();
и
int function(void);
это в си совсем не одно и то же
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 10 2015, 15:12
Сообщение #144


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
den_po
сообщение Oct 10 2015, 15:40
Сообщение #145


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



Цитата(zltigo @ Oct 10 2015, 19:12) *
Да ну! Не дайте помереть невежей - поведайте в чем-же это было раньше отличие.

Отличие и сейчас есть. Первый вариант позволяет вызвать функцию с любым числом аргументов.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 10 2015, 16:20
Сообщение #146


.
******

Группа: Участник
Сообщений: 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


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 10 2015, 17:08
Сообщение #147


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
den_po
сообщение Oct 10 2015, 19:26
Сообщение #148


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



Цитата(GetSmart @ Oct 10 2015, 20:20) *
В какого года стандарте это определено?

С того же 89 оно упоминается. Тогда оно было "устаревающим", сейчас устаревшее, но из стандарта не удалённое.

Цитата(zltigo @ Oct 10 2015, 21:08) *
Разумеется нет. И вообще "любое" в Cи вообще не сущесвует, ибо даже funktion(...); , если компилятор и не выдаст ошибку, как минимум бессмысленна, посему - funktion( param, .... );
То есть не менее одного.

Гуглите, читайте, пробуйте.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 10 2015, 20:18
Сообщение #149


Гуру
******

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



QUOTE (den_po @ Oct 10 2015, 22:26) *
Гуглите, читайте, пробуйте.

Понятно. Просто сбрехали.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
den_po
сообщение Oct 10 2015, 20:34
Сообщение #150


Частый гость
**

Группа: Участник
Сообщений: 139
Регистрация: 9-11-12
Из: Санкт-Петербург
Пользователь №: 74 315



Цитата(zltigo @ Oct 11 2015, 00:18) *
Понятно. Просто сбрехали.

Вы из тех, кто считает себя слишком опытным, чтоб допустить свою неправоту, да?
Go to the top of the page
 
+Quote Post

18 страниц V  « < 8 9 10 11 12 > » 
Reply to this topicStart new topic
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016