Golikov 0 17 октября, 2015 Опубликовано 17 октября, 2015 · Жалоба Все зависит от области где вы работаете и от вашей внутренней самодисциплины. Если вы работаете один, на вашем коде не лежат риски жизни, вам все понятно и все знаете как кое кто, то писать можете как угодно. Если у вас есть корпоративные правила, если у вас есть ГОСТы на ПО и прочее, то писать надо как предписывают правила. Если вы работаете в команде и у вас есть стиль, то писать надо как предписывает стиль, чтобы команде было удобно работать.... Не надо думать что как и почему, зачем в стандарте. Выберите свой путь из допустимых и вперед.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 17 октября, 2015 Опубликовано 17 октября, 2015 (изменено) · Жалоба Если вы работаете один, на вашем коде не лежат риски жизни, вам все понятно и все знаете как кое кто, то писать можете как угодно. У меня много кода написано без (void) и ИАР всегда его правильно компилировал. Попытка компиляции одного из них в Кейле выдала варнинг, который я здесь обсудил. После таких угроз в ненадёжности мне любопытно, насколько они обоснованны. С секретными стандартами не знаком. Укажите, в чём неоднозначности толкования. Увод внимания с очевидно рискованных операторов вроде comma на ложную страшилку - типичный приём мошенничества. Если zltigo не прояснит заданный ему вопрос, а он умеет конструктивно аргументировать когда есть чем, то можно делать вывод, что нечем. Одновременность ввода void в стандарт для типа функции и для списка аргументов, которым он пытается "отбиться", пока тянет только на маскировку бесполезности/вредности второго нововведения. Или ещё можно предпологать (ака делать вид), что он знаком с военной тайной, которую простым смертным знать не полагается. Изменено 17 октября, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 17 октября, 2015 Опубликовано 17 октября, 2015 · Жалоба конкретно про 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(); может трактоваться и как функция без параметров, так и функция с произвольным числом параметров. То есть это расширение в сторону большей определенности, чтобы не было что я думал будет так, а компилятор подумал что будет эдак. Хотя кто-то считает это малодушием и предлагает наизусть выучить как подумает компилятор, самому запомнить и тролить этим новичков, постоянно используя в коде всякие неоднозначные вещи... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 17 октября, 2015 Опубликовано 17 октября, 2015 (изменено) · Жалоба Буду считать, что компромисс с микробами. --------------- Проверил на ИАР. Он не выдаёт даже ремарки на вызов через декларацию с заданием любого кол-ва арументов. C FatFS и "(void) переменная" напутал. Это был NXP UsbHostLite. Там (void) применялся к аргументу функции (указатель но волатил-массив) без его использования "(void) arg;". В исходниках EHCI тоже встречается преобразователь типа - (void), но стоит перед некоторыми вызовами некоторых (в т.ч. статик) функций, возвращающих значения. Фунции, судя по логике программы, вызываются. Значение отбрасыватся. Но и без (void) оно должно отбрасываться без замечаний компилятора. Вызов этих функций там есть и без (void) с отбрасыванием результата. Что же хотел сказать автор? Напоминает крики о помощи подневольных программистов :) Изменено 18 октября, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Johnny81 0 19 октября, 2015 Опубликовано 19 октября, 2015 · Жалоба Проверил на ИАР. Он не выдаёт даже ремарки на вызов через декларацию с заданием любого кол-ва арументов. Так компилируйте в режиме С++, в чем проблема-то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 19 октября, 2015 Опубликовано 19 октября, 2015 · Жалоба В исходниках EHCI тоже встречается преобразователь типа - (void), но стоит перед некоторыми вызовами некоторых (в т.ч. статик) функций, возвращающих значения. Фунции, судя по логике программы, вызываются. Значение отбрасыватся. Но и без (void) оно должно отбрасываться без замечаний компилятора. Вызов этих функций там есть и без (void) с отбрасыванием результата. Что же хотел сказать автор? Я тоже такое видел не раз. Гипотетически как-то может помочь оптимизации при встаивании static функции. На деле просто чушь с точки зрения компилятора. Но писателю исходников может так нравится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 19 октября, 2015 Опубликовано 19 октября, 2015 · Жалоба На деле просто чушь с точки зрения компилятора. А может, это обход ругани каких-нибудь особо дотошных статических анализаторов кода? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 19 октября, 2015 Опубликовано 19 октября, 2015 · Жалоба А может, это обход ругани каких-нибудь особо дотошных статических анализаторов кода? Как вариант. Но лично я встречал сие весьма хаотически разбросанное по исходнику. Могу найти образчик, ибо с месяц назад вычитывал один исходник от Jennic - помнится там сие встречалось. Сам исходник был такой, что хоть святых выноси :(, но являлся частью вынуждено вынесенного на всеобщее обозрение стека и действительно вполне мог писан с соблюдением каки-то формальных требований. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 19 октября, 2015 Опубликовано 19 октября, 2015 · Жалоба В исходниках EHCI тоже встречается преобразователь типа - (void), но стоит перед некоторыми вызовами некоторых (в т.ч. статик) функций, возвращающих значения. Фунции, судя по логике программы, вызываются. Значение отбрасыватся. Но и без (void) оно должно отбрасываться без замечаний компилятора. Вызов этих функций там есть и без (void) с отбрасыванием результата. Что же хотел сказать автор? Автор хотел сказать, что, дескать, я не забыл, что функция возвращает значение, просто я его нарочно игнорирую. К тому же некоторые компиляторы могут выдавать предупреждение "возвращаемое значение не используется", и приведение к void помогает подавить это предупреждение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба В бессмысленности получившегося выражения. По этой причине прилично-бы выдать warning. IAR-у можно включить. Но у большинства - нет :( Вообще-то этот трюк позволяет энкапсулировать макрос. И еще мне когда-то надо было избежать goto и данное решение легко позволяет заменить его на break. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Вообще-то этот трюк позволяет энкапсулировать макрос. И еще мне когда-то надо было избежать goto и данное решение легко позволяет заменить его на break. Готов рассмотреть КОНКРЕТНО обе Ваших "проблемы". Дайте этих два кусочка исходников и рассмотрим необходимость тиражирования конкретных трюков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба вот типа того ... if (cond1) goto end .... if(cond2) goto end .... :end .... ... вот такой код, надо не трогая структуру не трогая то что под ... переписать чтобы не было goto, а логика работы осталась прежней... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба вот типа того ... if (cond1) goto end .... if(cond2) goto end .... :end .... ... вот такой код, надо не трогая структуру не трогая то что под ... переписать чтобы не было goto, а логика работы осталась прежней... Для чего "надо"? А для чего вообще надо было писать это дерьмо с goto, потом для неведомо чего усугублять оставляя изначальное дерьмо но без goto следуя дебильному лозунгу "goto вредно"? А написать сразу по человечески что мешало? Ну а способов, как оставить "похоже" множество. Самые безобидные: static void dummy(void) { if (cond1) return; .... if(cond2) return; .... } ... for(;; ) { if (cond1) break; .... if(cond2) break; .... break; } Из серии наворотить дальше, наряду с Вашим любимым и "незаменимым" while{}do(0) можно писать чего угодно, да хоть switch(0){} Только нафига :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Надо бывает много для чего, ну и чем for(;;) {break} или switch(0){} лучше while{}do(0), ну кроме того что вы его лично не любите? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 20 октября, 2015 Опубликовано 20 октября, 2015 · Жалоба Надо бывает много для чего, ну и чем for(;;) {break} или switch(0){} лучше while{}do(0), ну кроме того что вы его лично не любите? Не буди лихо, пока оно тихо :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться