Я, вероятно, слишком много думаю об этом, и несколько месяцев кодировал и отключал, но ищу передовой совет по чему-то очень простому. Вопрос: Это осуждается на что-то подобное?
uint8_t dotPos = GetDotPos(&buffer[0], len);
или лучше (как это часто видно в примерах) сделать это:
uint8_t dotPos = 0;
dotPos = GetDotPos(&buffer[0], len);
Или предпочтений нет?





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 .
Оба широко используются. Некоторые люди могут предпочесть один или другой, и это полностью вопрос вкуса. Некоторые люди могут возразить, что более поздние версии позволяют объявлять все функциональные переменные в верхней части функции, что можно считать более чистым.
Стиль кода — это не совсем вопрос вкуса. Люди делают больше или меньше ошибок в одних стилях кода, чем в других. Исследования могут выявить эти проблемы и предоставить некоторую объективную информацию о том, какие стили кода лучше.
Если вы писали код C примерно в 1973 году, вам нужно было сначала объявить все переменные. Это не было предпочтением или выбрано для ясности, а ограничение компиляторов в то время.
Обычно компилятор выполняет оптимизацию кода, такую как свертывание констант и распространение констант, поэтому назначение не должно влиять на производительность.
Вам решать, какой метод вы предпочитаете, или если ваша организация указывает определенный метод.
"Это не одобряется делать что-то вроде..."
"или лучше потренироваться..."
— Или нет предпочтения?
Формулировка вашего вопроса предполагает, что у вас, возможно, уже есть естественные предпочтения. Попробуйте.
Хотя обращать внимание на хорошую информацию о синтаксисе и семантике полезно, будьте осторожны, откуда и от кого вы будете получать эту информацию. Часто программисты, хотя и с благими намерениями, предлагают идиоматические конструкции, обучая (или убеждая) другого формировать привычки способом, подходящим для конкретной точки зрения. Однако будьте осторожны, принимая идеи, особенно когда они имеют узкий охват, и используйте язык со слишком большим количеством абсолютов. (всегда делайте это так, никогда не используйте...) Гладко изложенные, но чрезмерно педантичные мандаты должны быть тщательно изучены, прежде чем остановиться на них.
Ваш вопрос касается очень конкретного сценария, но рассмотрите другие сценарии, с которыми вы, вероятно, столкнетесь, чтобы полностью решить, как/когда создавать и инициализировать переменные...
Каждый из них будет влиять на то, как вы создаете, инициализируете и, возможно, поддерживаете целостность вашей переменной, поэтому, вероятно, заставит вас еще раз подумать, как лучше реализовать.
Это зависит от объема "i", который вы хотите. Если вы устанавливаете «i» в цикле или условии и планируете использовать его снаружи, вам необходимо иметь объявление до него и вне цикла/области {}, иначе компилятор будет жаловаться, как только вы сошлетесь на та же переменная без объявления.
В противном случае единый оператор для объявления и присваивания является правильным и оптимальным.
Кроме того, если переменная является указателем на ячейку памяти, вам определенно нужно вызвать memset/calloc, чтобы очистить ячейку перед назначением, что является лучшей практикой, потому что вы не знаете, что скрывается в указанной ячейке.
Добавьте const в пример, это хороший момент!