﻿# V2666\. MISRA\. All declarations of an object with an explicit alignment specification should specify the same alignment\.

Диагностическое правило основано на руководстве [MISRA](https://misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Правило актуально только для С\.

Если любое определение объекта содержит явный спецификатор выравнивания \([`alignas`](https://en.cppreference.com/w/cpp/language/alignas.html)\), то все другие объявления того же объекта должны быть определены с таким же выравниванием\.

В случае, если выравнивания нет, ни одно из объявлений этого объекта не должно его указывать\.

Если в разных файлах исходного кода объявления одного и того же объекта имеют разные спецификаторы выравнивания, то поведение программы не определено \(С11 пункт [6\.7\.5\.6](https://open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf#page=146)\)\.

Рассмотрим пример:

```cpp
//header.h
extern alignas(16) int32_t var;

//file.c
alignas(8)         int32_t var;
```

В заголовочном файле `header.h` объявляется переменная `var` с выравниванием 16 байт\. Далее в исходном файле есть определение этой переменной, но с другим выравниванием\. Поведение такой программы не определено\.

Исправленный пример:

```cpp
//header.h
extern alignas(16) int32_t var;

//file.c
alignas(16)        int32_t var;
```