О главе

«Си для встраиваемых систем»

Это онлайн версия книги «Си для встраиваемых систем». В печатном формате её можно приобрести у нас в магазине, а в виде файла epub/mobi/pdf на площадке LeanPub.

Прежде чем приступать к изучению синтаксиса языка, необходимо обратить внимание на то, как следует писать код. Он может быть как абсолютно непонятным, нечитаемым, так и выглядеть как «рассказ» — код, на который будет приятно смотреть, и происходящее там будет ясно не только разработчику, но и другим людям. Читаемость кода — очень важная вещь. Если вы, находясь в контексте задачи, напишете что-то такое:

for (int i = 0; i < n; i++) if (k % 2 == 0) a++; else b++;

то какова вероятность того, что вы поймете, что делает этот код, месяц спустя? А что насчет вашего коллеги, которому придется доделывать ваш проект? Такой код следует привести к более читаемому виду.

for (int month = 0; month < latest_month; month++) {
    if (month % 2 == 0)
        even_month++;
    else
        odd_month++;
}

Переменным стоит давать понятные и осмысленные названия. В таком случае разъяснять в комментариях сам код даже не придется. Другой очевидный совет — нужно соблюдать общепринятое (или принятое в компании) форматирование кода. Хорошим примером стиля написания для языка С++ является Code Style Guide от компании Google.


Изменено:

Язык Си: 6 комментариев

  1. >Вместо нуля может быть почти любой другой символ. Плюс и минус работают по-другому. Для выравнивания числа по по левому краю, а не по правому, перед числом нужно поставить знак минус.
    Лишне по

  2. Термин «регистр ядра» довольно специфичен. Звучит не привычно. А почему не использовать термин CPU или процессор или на худой конец микроконтроллер?

  3. Смысл статических переменных вне функции мне кажется не раскрыт. Такой модификатор делает переменную недоступной из других единиц трансляции. Т.е. не будет конфликта имен между разными .с файлами.

  4. #ifdef STM8
    ind.i = 250;
    #elif STM32
    ind.j = 1027;

    Точно #elif ? Что-то мне подсказывает, что здесь должно быть либо #else #ifdef STM32, либо просто #ifdef STM32

  5. «printf(«a\t: 10\n\r»);
    printf(«ab\t: 11\n\r»);
    printf(«abc\t: 12\n\r»);
    // a___: 10
    // ab__: 10
    // abc_: 10″

    Не понял, почему 10 в выводе в каждой строке?

  6. «Для вывода чисел с плавающей запятой приведённые выше опции так же работают, но добавляются и другие. Например, если нам нужно ограничиться выводом сотых, нужно написать точку и цифру 2. При чём обратите внимание число будет округлятся в большую сторону.

    float pi = 3.1415926;
    printf(«%.0f\n\r», pi); // 3
    printf(«%.1f\n\r», pi); // 3.1
    printf(«%.2f\n\r», pi); // 3.14
    printf(«%.3f\n\r», pi); // 3.142
    printf(«%.4f\n\r», pi); // 3.1416″

    В то же время:
    «printf(«%.1f\n\r», pi); // 3.1
    printf(«%.2f\n\r», pi); // 3.14″

    Насколько я вижу, округление происходит по математическим правилам, в том числе при округлении пятерки. Где ошибка: в примере или в описании?

Добавить комментарий для Павел Отменить ответ

Ваш адрес email не будет опубликован.