Вызов функции и создание переменной за один раз

Я, вероятно, слишком много думаю об этом, и несколько месяцев кодировал и отключал, но ищу передовой совет по чему-то очень простому. Вопрос: Это осуждается на что-то подобное?

uint8_t dotPos = GetDotPos(&buffer[0], len);

или лучше (как это часто видно в примерах) сделать это:

uint8_t dotPos = 0;
dotPos = GetDotPos(&buffer[0], len);

Или предпочтений нет?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
55
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий
const uint8_t dotPos = GetDotPos(&buffer[0], len);

это лучшая практика. Объявление переменных и инициализация должны быть близко друг к другу для удобочитаемости кода. Кроме того, если переменная не изменяется, установите для нее значение const. Следование этому соглашению значительно упрощает анализ потока кода в нашей голове.

Из https://google.github.io/styleguide/cppguide.html#Local_Variables:

Поместите переменные функции в максимально узкую область видимости и инициализируйте переменные в объявлении.

int i;
i = f();      // Bad -- initialization separate from declaration.

int i = f();  // Good -- declaration has initialization.

Также https://wiki.c2.com/?DeclareVariablesAtFirstUse .

Добавьте const в пример, это хороший момент!

Puck 03.07.2023 13:43

Оба широко используются. Некоторые люди могут предпочесть один или другой, и это полностью вопрос вкуса. Некоторые люди могут возразить, что более поздние версии позволяют объявлять все функциональные переменные в верхней части функции, что можно считать более чистым.

Стиль кода — это не совсем вопрос вкуса. Люди делают больше или меньше ошибок в одних стилях кода, чем в других. Исследования могут выявить эти проблемы и предоставить некоторую объективную информацию о том, какие стили кода лучше.

Eric Postpischil 03.07.2023 14:34

Если вы писали код C примерно в 1973 году, вам нужно было сначала объявить все переменные. Это не было предпочтением или выбрано для ясности, а ограничение компиляторов в то время.

BoP 03.07.2023 14:34

Обычно компилятор выполняет оптимизацию кода, такую ​​как свертывание констант и распространение констант, поэтому назначение не должно влиять на производительность.

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

"Это не одобряется делать что-то вроде..."
"или лучше потренироваться..."
— Или нет предпочтения?

Формулировка вашего вопроса предполагает, что у вас, возможно, уже есть естественные предпочтения. Попробуйте.
Хотя обращать внимание на хорошую информацию о синтаксисе и семантике полезно, будьте осторожны, откуда и от кого вы будете получать эту информацию. Часто программисты, хотя и с благими намерениями, предлагают идиоматические конструкции, обучая (или убеждая) другого формировать привычки способом, подходящим для конкретной точки зрения. Однако будьте осторожны, принимая идеи, особенно когда они имеют узкий охват, и используйте язык со слишком большим количеством абсолютов. (всегда делайте это так, никогда не используйте...) Гладко изложенные, но чрезмерно педантичные мандаты должны быть тщательно изучены, прежде чем остановиться на них.

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

Каждый из них будет влиять на то, как вы создаете, инициализируете и, возможно, поддерживаете целостность вашей переменной, поэтому, вероятно, заставит вас еще раз подумать, как лучше реализовать.

Это зависит от объема "i", который вы хотите. Если вы устанавливаете «i» в цикле или условии и планируете использовать его снаружи, вам необходимо иметь объявление до него и вне цикла/области {}, иначе компилятор будет жаловаться, как только вы сошлетесь на та же переменная без объявления.

В противном случае единый оператор для объявления и присваивания является правильным и оптимальным.

Кроме того, если переменная является указателем на ячейку памяти, вам определенно нужно вызвать memset/calloc, чтобы очистить ячейку перед назначением, что является лучшей практикой, потому что вы не знаете, что скрывается в указанной ячейке.

Другие вопросы по теме

Похожие вопросы