﻿# V2642\. MISRA\. The '\_Atomic' specifier should not be applied to the incomplete type 'void'\.

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

Это правило актуально только для языка C\.

Использование указателя на атомарный неполный тип \(`_Atomic void *`\) может привести к неожиданным результатам, и потому должно избегаться\.

В языке C тип `void *` можно преобразовать к любому типу `T *` \(C11, п\. 6\.3\.2\.3\.1\), однако стандарт не налагает никаких требований к размеру и выравниванию на указатель `_Atomic void *` \(C11, п\. 6\.2\.5\.28\)\. Вследствие этого, преобразование между указателем на атомарный неполный тип \(`_Atomic void *`\) и указателем на произвольный атомарный тип \(`_Atomic T *`\) может привести к неопределённому поведению\.

Пример кода, на котором анализатор сгенерирует предупреждения:

```cpp
int _Atomic a;

void main (void)
{
  a = 5;
  void _Atomic * avp1 = &a; 
  _Atomic(void)* avp2 = &a; 
}
```