Функции
(void)
.NULL
также указывает на ошибку.thread_getpid(void);
hwtimer_init_comp(uint32_t fcpu);
int transceiver_pid;
/* вместо: */
void CamelCaseNamedFunction(int camelCaseNamedVar);
/* пишите: */
void camel_case_named_function(int camel_case_named_var);
/* вместо: */
if (debug) println("DEBUG");
else println("DEBUG ELSE");
/* напишите: */
if (debug) {
println("DEBUG");
}
else {
println("DEBUG ELSE");
}
#ifdef MODULE_...
вокруг включений факультативных заголовков:#ifdef MODULE_ABC
#include "abc.h"
#endif
Все файлы должны иметь защитные элементы заголовков вида:
#ifndef PATH_TO_FILE_FILENAME_H
#define PATH_TO_FILE_FILENAME_H
...
#endif /* PATH_TO_FILE_FILENAME_H */
Правила создания имени защиты:
include/
, включите путь оттуда;Примеры:
Примечание: эти правила будут применяться CI.
extern "C"
:#ifdef __cplusplus
extern "C" {
#endif
... все ваши объявления функций, глобальные переменные и определения принадлежат здесь
#ifdef __cplusplus
}
#endif
__restrict
вместо restrict
в заголовках (сравните https://github.com/RIOT-OS/RIOT/pull/2042).Абсолютные значения должны быть указаны как макросы или перечисления, а не как литералы, т. е. вместо:
int timeout = 7 * 1000000;
писать:
int timeout = TIMEOUT_INTERVAL * USEC_PER_SEC;
Комментарии: все комментарии должны быть написаны в стиле комментариев C. Например:
/* Это комментарий в стиле C */
Неверно:
// Комментарий C++ здесь
Документация:
Пример документации Doxygen в заголовочном файле может выглядеть так:
/*
* Copyright (C) 2014 Peter Schmerzl <peter@schmerzl-os.org>
*
* Этот файл подчиняется условиям и положениям GNU Lesser General Public License v2.1. Подробнее см. файл LICENSE в верхнем каталоге.
*/
/**
* @ingroup foobar
* @{
*
* @file
* @brief Определения для функций foo и bar.
*
* Более подробная информация о файле и реализованной функциональности.
*
* @author Peter Schmerzl <peter@schmerzl-os.org>
*
*/
/**
* @brief Установить состояние foobar.
*
* @param[in] state Новое состояние foobar.
* @param[out] old_state Старое состояние foobar записывается в эту переменную.
*
* @return 1, если установка состояния прошла успешно, 0 в противном случае.
*/
int set_foobar(int state, int *old_state);
Общие предупреждения компиляции: некоторые решения для правильной обработки предупреждений компиляции.
-Wformat: решение для ошибок форматирования строк:
size_t
: используйте %u
и приведите переменную к (unsigned)
, потому что newlib-nano
не поддерживает %zu
пример.unsigned char/uint8_t
: используйте %u
, потому что newlib-nano
не поддерживает %hu/PRIu8
пример.uint32_t
: используйте формат печати PRIu32
пример.newlib-nano
, как сказано здесь ссылка. Рекомендуется использовать модуль fmt
для этих целей. Пример.-Wformat-nonliteral: для функции printf
со следующей ошибкой: error: format string is not a string literal
.
__attribute__((__format__ (__printf__, 3, 4)))
, где здесь 3
— номер аргумента с форматом, а 4
— аргументы формата, начиная с 1. См. пример.va_list
: используйте __attribute__((__format__ (__printf__, 1, 0)))
, где 1
— номер аргумента с форматом и 0
, поскольку нет переменного количества аргументов. См. пример.Git: делайте один коммит на изменение. Первая строка сообщения о фиксации описывает основную функцию фиксации.
Непрерывная интеграция: если тесты CI терпят неудачу из-за... Ошибки необходимо исправить.
/* cppcheck-suppress <категория ошибки/предупреждения>
* (причина: cppcheck ведёт себя очень глупо. это точно не разыменование нулевого указателя) */
#!/usr/bin/env python3
#!/usr/bin/env python3
# Copyright (C) <your copyright>
#
# Этот файл подчиняется условиям и положениям GNU Lesser
# General Public License v2.1. Более подробную информацию см. в файле LICENSE в верхнем уровне каталога.
# поместите импорт модулей первым
# см. https://www.python.org/dev/peps/pep-0008/#imports
# для более подробной информации
import module1
import module2
# Необязательные глобальные переменные
GLOBAL_VARIABLE = "I'm global"
# локальные функции, если требуется
def local_func():
# Поместите сюда код вашей локальной функции
# Основная функция
def main_func():
# Поместите здесь основной код
if __name__ == "__main__":
# Вызовите основную функцию отсюда:
main_func()
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )