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

 
 
18 страниц V  « < 14 15 16 17 18 >  
Reply to this topicStart new topic
> Косяк у Кейла, Препроцессор не следит за скобками
Golikov A.
сообщение Oct 17 2015, 07:10
Сообщение #226


Гуру
******

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



Все зависит от области где вы работаете и от вашей внутренней самодисциплины.
Если вы работаете один, на вашем коде не лежат риски жизни, вам все понятно и все знаете как кое кто, то писать можете как угодно.

Если у вас есть корпоративные правила, если у вас есть ГОСТы на ПО и прочее, то писать надо как предписывают правила.

Если вы работаете в команде и у вас есть стиль, то писать надо как предписывает стиль, чтобы команде было удобно работать....

Не надо думать что как и почему, зачем в стандарте. Выберите свой путь из допустимых и вперед....
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 17 2015, 11:06
Сообщение #227


.
******

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



Цитата(Golikov A. @ Oct 17 2015, 11:10) *
Если вы работаете один, на вашем коде не лежат риски жизни, вам все понятно и все знаете как кое кто, то писать можете как угодно.

У меня много кода написано без (void) и ИАР всегда его правильно компилировал. Попытка компиляции одного из них в Кейле выдала варнинг, который я здесь обсудил. После таких угроз в ненадёжности мне любопытно, насколько они обоснованны. С секретными стандартами не знаком. Укажите, в чём неоднозначности толкования. Увод внимания с очевидно рискованных операторов вроде comma на ложную страшилку - типичный приём мошенничества.

Если zltigo не прояснит заданный ему вопрос, а он умеет конструктивно аргументировать когда есть чем, то можно делать вывод, что нечем. Одновременность ввода void в стандарт для типа функции и для списка аргументов, которым он пытается "отбиться", пока тянет только на маскировку бесполезности/вредности второго нововведения. Или ещё можно предпологать (ака делать вид), что он знаком с военной тайной, которую простым смертным знать не полагается.

Сообщение отредактировал GetSmart - Oct 17 2015, 19:07


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


Гуру
******

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



конкретно про void
как я понял в каких то дремучих годах, не было прототипов функций.

и если вам надо было вызвать в коде функцию из другого файла (условно), да при этом она возвращала не int, то чтобы обозначит этот возвращаемый тип ввели то что тут назвали декларацией функции, то есть есть у нас

Код
char MyFunc(int a, char d)
{
  .....
}


мы хотим ее вызвать где-то в другом файле, и у нас нет прототипов, то есть нельзя подключить заголовочный файл с описанием
char MyFunc(int a, char d); Тогда мы в начале этого файла где хотим вызвать пишем
char MyFunc(); - то есть смысл указать что MyFunc возвращает char, и потому разрешили скобки оставить пустыми, то есть не важно что она принимает важно что она возвращает.

Потом стандарты поменялись и ввели прототипы и как я понимаю для большей строгости решили разделить
char MyFunc(); которая принимает кучу параметров и запись есть декларация возвращаемого значения и
char MyFunc2(); которая на самом деле не принимает никаких значений, и потому в прототипах вторая указывается как
char MyFunc2(void);

Нужно ли тянуть все эти атавизмы до С89, когда уже и С99 не последний я не знаю. Сам я пишу для функций не принимающих значения явным образом void в скобках. Потому что это явно обозначает мои желания при объявлении функции. Текста мне, как и ударов по кнопкам не жалко, а может быть кого-то это спасет.

Объявите где-то еще такую функцию, но с параметрами и сразу получите об этом сигнал. В то время как char MyFunc(); может трактоваться и как функция без параметров, так и функция с произвольным числом параметров. То есть это расширение в сторону большей определенности, чтобы не было что я думал будет так, а компилятор подумал что будет эдак.
Хотя кто-то считает это малодушием и предлагает наизусть выучить как подумает компилятор, самому запомнить и тролить этим новичков, постоянно используя в коде всякие неоднозначные вещи...
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 17 2015, 19:46
Сообщение #229


.
******

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



Буду считать, что компромисс с микробами.

---------------

Проверил на ИАР. Он не выдаёт даже ремарки на вызов через декларацию с заданием любого кол-ва арументов.

C FatFS и "(void) переменная" напутал. Это был NXP UsbHostLite. Там (void) применялся к аргументу функции (указатель но волатил-массив) без его использования "(void) arg;".

В исходниках EHCI тоже встречается преобразователь типа - (void), но стоит перед некоторыми вызовами некоторых (в т.ч. статик) функций, возвращающих значения. Фунции, судя по логике программы, вызываются. Значение отбрасыватся. Но и без (void) оно должно отбрасываться без замечаний компилятора. Вызов этих функций там есть и без (void) с отбрасыванием результата. Что же хотел сказать автор?

Напоминает крики о помощи подневольных программистов sm.gif

Сообщение отредактировал GetSmart - Oct 18 2015, 15:23


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Oct 19 2015, 05:14
Сообщение #230


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(GetSmart @ Oct 17 2015, 22:46) *
Проверил на ИАР. Он не выдаёт даже ремарки на вызов через декларацию с заданием любого кол-ва арументов.


Так компилируйте в режиме С++, в чем проблема-то?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 19 2015, 06:59
Сообщение #231


Гуру
******

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



QUOTE (GetSmart @ Oct 17 2015, 22:46) *
В исходниках EHCI тоже встречается преобразователь типа - (void), но стоит перед некоторыми вызовами некоторых (в т.ч. статик) функций, возвращающих значения. Фунции, судя по логике программы, вызываются. Значение отбрасыватся. Но и без (void) оно должно отбрасываться без замечаний компилятора. Вызов этих функций там есть и без (void) с отбрасыванием результата. Что же хотел сказать автор?

Я тоже такое видел не раз. Гипотетически как-то может помочь оптимизации при встаивании static функции. На деле просто чушь с точки зрения компилятора. Но писателю исходников может так нравится.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
den_po
сообщение Oct 19 2015, 07:02
Сообщение #232


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

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



Цитата(zltigo @ Oct 19 2015, 09:59) *
На деле просто чушь с точки зрения компилятора.

А может, это обход ругани каких-нибудь особо дотошных статических анализаторов кода?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 19 2015, 07:47
Сообщение #233


Гуру
******

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



QUOTE (den_po @ Oct 19 2015, 10:02) *
А может, это обход ругани каких-нибудь особо дотошных статических анализаторов кода?

Как вариант. Но лично я встречал сие весьма хаотически разбросанное по исходнику. Могу найти образчик, ибо с месяц назад вычитывал один исходник от Jennic - помнится там сие встречалось. Сам исходник был такой, что хоть святых выноси sad.gif, но являлся частью вынуждено вынесенного на всеобщее обозрение стека и действительно вполне мог писан с соблюдением каки-то формальных требований.






--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 19 2015, 07:50
Сообщение #234


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(GetSmart @ Oct 17 2015, 22:46) *
В исходниках EHCI тоже встречается преобразователь типа - (void), но стоит перед некоторыми вызовами некоторых (в т.ч. статик) функций, возвращающих значения. Фунции, судя по логике программы, вызываются. Значение отбрасыватся. Но и без (void) оно должно отбрасываться без замечаний компилятора. Вызов этих функций там есть и без (void) с отбрасыванием результата. Что же хотел сказать автор?

Автор хотел сказать, что, дескать, я не забыл, что функция возвращает значение, просто я его нарочно игнорирую. К тому же некоторые компиляторы могут выдавать предупреждение "возвращаемое значение не используется", и приведение к void помогает подавить это предупреждение.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Oct 20 2015, 12:35
Сообщение #235


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(zltigo @ Aug 28 2015, 19:02) *
В бессмысленности получившегося выражения. По этой причине прилично-бы выдать warning. IAR-у можно включить. Но у большинства - нет sad.gif

Вообще-то этот трюк позволяет энкапсулировать макрос. И еще мне когда-то надо было избежать goto и данное решение легко позволяет заменить его на break.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 20 2015, 12:49
Сообщение #236


Гуру
******

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



QUOTE (Tarbal @ Oct 20 2015, 15:35) *
Вообще-то этот трюк позволяет энкапсулировать макрос. И еще мне когда-то надо было избежать goto и данное решение легко позволяет заменить его на break.

Готов рассмотреть КОНКРЕТНО обе Ваших "проблемы". Дайте этих два кусочка исходников и рассмотрим необходимость тиражирования конкретных трюков.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 20 2015, 13:50
Сообщение #237


Гуру
******

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



вот типа того

Код
...
if (cond1)
   goto end
....
if(cond2)
  goto end
....
:end
....
...


вот такой код, надо не трогая структуру не трогая то что под ... переписать чтобы не было goto, а логика работы осталась прежней...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 20 2015, 16:34
Сообщение #238


Гуру
******

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



QUOTE (Golikov A. @ Oct 20 2015, 16:50) *
вот типа того

CODE
...
if (cond1)
   goto end
....
if(cond2)
  goto end
....
:end
....
...


вот такой код, надо не трогая структуру не трогая то что под ... переписать чтобы не было goto, а логика работы осталась прежней...

Для чего "надо"?
А для чего вообще надо было писать это дерьмо с goto, потом для неведомо чего усугублять оставляя изначальное дерьмо но без goto следуя дебильному лозунгу "goto вредно"?
А написать сразу по человечески что мешало? Ну а способов, как оставить "похоже" множество. Самые безобидные:
CODE
static void dummy(void)
{
if (cond1)
   return;
....
if(cond2)
  return;
....
}


CODE
...

for(;; )
{
if (cond1)
   break;
....
if(cond2)
  break;
....
break;
}



Из серии наворотить дальше, наряду с Вашим любимым и "незаменимым" while{}do(0)
можно писать чего угодно, да хоть switch(0){}

Только нафига sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 20 2015, 18:14
Сообщение #239


Гуру
******

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



Надо бывает много для чего, ну и чем for(;;) {break} или switch(0){} лучше while{}do(0), ну кроме того что вы его лично не любите?



Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 20 2015, 18:26
Сообщение #240


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Golikov A. @ Oct 20 2015, 21:14) *
Надо бывает много для чего, ну и чем for(;;) {break} или switch(0){} лучше while{}do(0), ну кроме того что вы его лично не любите?

Не буди лихо, пока оно тихо crying.gif
Go to the top of the page
 
+Quote Post

18 страниц V  « < 14 15 16 17 18 >
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 11:56
Рейтинг@Mail.ru


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