Правила 8.1-8.14 MISRA C®:2012 осуществляют хорошие методы кодирования окружающие объявления и определения. Если вы примените эти методы, у вас, менее вероятно, будут конфликтные объявления или непреднамеренно изменить переменные.
Если вы не применяете эти методы во время кодирования, ваш код может потребовать, чтобы существенные изменения позже были MISRA C-compliant. У вас может быть слишком много MISRA C нарушения. Иногда, в фиксации нарушения, вы можете нарушить другое правило. Вместо этого помните об этих правилах при кодировании. Используйте средство проверки MISRA C:2012, чтобы определить любые проблемы, которые вы можете пропустить.
Явным образом задайте все типы данных в объявлениях.
Избегайте неявных типов данных как это объявление k
:
extern void foo (char c, const k);
Вместо этого использование:
extern void foo (char c, const int k);
Тем путем вы не нарушаете MISRA C:2012 Rule 8.1
(Polyspace Code Prover Access).
При объявлении функций обеспечьте имена и типы данных для всех параметров.
Избегайте объявлений без названий параметра как эти объявления:
extern int func(int); extern int func2();
Вместо этого использование:
extern int func(int arg); extern int func2(void);
Тем путем вы не нарушаете MISRA C:2012 Rule 8.2
(Polyspace Code Prover Access).
Если вы хотите использовать объект или функцию в нескольких файлах, объявите объект или функцию однажды только в одном заголовочном файле.
Чтобы использовать объект в нескольких исходных файлах, объявите его как extern
в заголовочном файле. Включайте заголовочный файл во все исходные файлы, где вам нужен объект. В одном из тех исходных файлов задайте объект. Например:
/* header.h */ extern int var;
/* file1.c */ #include "header.h" /* Some usage of var */
/* file2.c */ #include "header.h" int var=1;
Чтобы использовать функцию в нескольких исходных файлах, объявите его в заголовочном файле. Включайте заголовочный файл во все исходные файлы, где вам нужна функция. В одном из тех исходных файлов задайте функцию.
Тем путем вы не нарушаете MISRA C:2012 Rule 8.3
(Polyspace Code Prover Access), MISRA C:2012 Rule 8.4
(Polyspace Code Prover Access), MISRA C:2012 Rule 8.5
(Polyspace Code Prover Access) или MISRA C:2012 Rule 8.6
(Polyspace Code Prover Access).
Если вы хотите использовать объект или функцию в одном файле только, объявить и задать объект или функцию с static
спецификатор.
Убедитесь, что вы используете static
спецификатор во всех объявлениях и определении. Например, этот функциональный func
предназначается, чтобы использоваться только в текущем файле:
static int func(void); static int func(void){ }
Тем путем вы не нарушаете MISRA C:2012 Rule 8.7
(Polyspace Code Prover Access) и MISRA C:2012 Rule 8.8
(Polyspace Code Prover Access).
Если вы хотите использовать объект в одной функции только, объявите объект в теле функции.
Постарайтесь не объявлять объект вне функции.
Например, если вы используете var
в func
только, действительно объявите его вне тела func
:
int var; void func(void) { var=1; }
Вместо этого использование:
void func(void) { int var; var=1; }
Тем путем вы не нарушаете MISRA C:2012 Rule 8.7
(Polyspace Code Prover Access) и MISRA C:2012 Rule 8.9
(Polyspace Code Prover Access).
Если вы хотите встроить функцию, объявить и задать функцию с static
спецификатор.
Каждый раз вы добавляете inline
к функциональному определению добавьте static
также:
static inline double func(int val); static inline double func(int val) { }
Тем путем вы не нарушаете MISRA C:2012 Rule 8.10
(Polyspace Code Prover Access).
При объявлении массивов явным образом задайте их размер.
Избегайте неявных технических требований размера как это:
extern int32_t array[];
Вместо этого использование:
#define MAXSIZE 10 extern int32_t array[MAXSIZE];
Тем путем вы не нарушаете MISRA C:2012 Rule 8.11
(Polyspace Code Prover Access).
При объявлении перечислений постарайтесь не смешивать неявные и явные технические требования.
Постарайтесь не смешивать неявные и явные технические требования. Можно задать первое перечисление, постоянное явным образом, но после этого, использовать или неявные или явные технические требования. Например, избегайте этого типа соединения:
enum color {red = 2, blue, green = 3, yellow};
Вместо этого использование:
enum color {red = 2, blue, green, yellow};
Тем путем вы не нарушаете MISRA C:2012 Rule 8.12
(Polyspace Code Prover Access).
При объявлении указателей укажите на const
- квалифицированный тип, если вы не хотите использовать указатель, чтобы изменить объект.
Укажите на const
- квалифицированный тип по умолчанию, если вы не намереваетесь использовать указатель для изменения резкого объекта. Например, в этом примере, ptr
не используется, чтобы изменить резкий объект:
char last_char(const char * const ptr){ }
Тем путем вы не нарушаете MISRA C:2012 Rule 8.13
(Polyspace Code Prover Access).