В соответствии с MISRA C++ 2-5-1
мы должны вообще избегать путаницы с орграфами. Хотя я не понимаю, почему мы должны также избегать использования читаемых слов and
, or
, not
и т.д., чтобы определить общие операторы &&
, ||
…
Проблема даже выделена как «основной» выпуск для сонара / MISRA:
[Major] Open Replace this digraph 'and' by its equivalent '&&'
[Major] Open Replace this digraph 'and' by its equivalent '&&'
[Major] Open Replace this digraph 'or' by its equivalent '||'
[Major] Open Replace this digraph 'or' by its equivalent '||'
[Major] Open Replace this digraph 'or' by its equivalent '||'
Это правило также включает в себя человек читаемый орграфы (которые сильно отличаются от загадочных ??=
, ??/
) по конкретной причине или правило просто тоже общий?
Я не обнаружил какого-либо конкретного риска или побочного эффекта при их использовании, я не прав?
Есть ли функциональная причина для этого правила MISRA, чтобы включить также человек читаемый орграфы? Должен ли я избегать их только для того, чтобы слепо удовлетворять правилу соответствия кода, или есть какая-то хитрая причина, скрывающаяся за этим?
Диграфы и триграфы являются лишь лексическим сахаром. Компилятор заменит их другими одиночными символами.
Правило MISRA C ++ 2-3-1 гласит: «Триграфы не должны использоваться».
Триграфы — это все символы, которые начинаются с «??» и третий символ, который определяет, что означает триграф. (например, «?? -» совпадает с «~»)
MISRA C ++ 2008 не перечисляет их. Поэтому я предполагаю, что подразумеваются все триграфы. Это:
??= ??/ ??’ ??( ??) ??! ??< ??> ??-
Правило MISRA C ++ 2-5-1 гласит: «Диграфы не должны использоваться».
Диграфы, например, «<% «или»%> «(равно» {«и»} «).
MISRA C ++ 2008 перечисляет запрещенные:
<% %> <: :> %: %:%:
Диграфы и триграфы
Для меня они реликты с древних времен. Вы можете написать программу на C ++, например без использования каких-либо скобок. Они делают исходный код нечитаемым:
void a()
<%
int b<:2:> = <%0, 0%>;
%>
Насколько я вижу, в MISRA C ++ 2008 нет правила, запрещающего использование читаемых человеком логических операторов (хотя они очень редки). Это означает, что правило Sonar является более строгим, чем MISRA C ++ 2008. Я думаю, что это ошибка.
По моему мнению, сообщество C / C ++ не знакомо с понятными человеку логическими операторами. Поэтому их следует избегать.
Кстати: стандарт C ++ называет их триграфами и «альтернативными токенами». Альтернативные логические операторы перечисляются там как таковые.