6

根据MISRA C++ 2-5-1我们通常应该避免弄乱有向图。虽然,我不明白为什么我们还应该避免使用易读的单词and,ornot来定义常见的运算符&&, ||, ...

该问题甚至被强调为 Sonar/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 规则是否有功能原因也包括人类可读的二合字母?我应该避免它们只是为了盲目地满足代码合规性规则还是隐藏一些真正棘手的原因?

4

1 回答 1

2

Digraphs 和 Trigraphs 只是词汇糖。编译器会将它们替换为其他单个字符。

MISRA C++ 规则 2-3-1 说“不得使用三合字母”。

三元组都是以“??”开头的字符 第三个字符定义了三元组的含义。(例如“??-”与“~”相同)

MISRA C++ 2008 没有列举这些。所以我假设,所有的三元组都是有意义的。这些是:

??= ??/ ??’ ??( ??) ??! ??< ??> ??-

MISRA C++ 规则 2-5-1 说“不得使用有向图”。

Digraphs 是例如“<%”或“%>”(等于“{”和“}”)。

MISRA C++ 2008 列举了被禁止的:

<% %> <: :> %: %:%:

有向图和三联图

对我来说,它们是远古时代的遗物。您可以编写一个 C++ 程序,例如不使用任何大括号。它们使源代码不可读:

void a()
<%
    int b<:2:> = <%0, 0%>;
%>

据我所知,MISRA C++ 2008 中没有任何规则禁止使用人类可读的逻辑运算符(尽管它们非常不常见)。这意味着声纳规则比 MISRA C++ 2008 更严格。我认为这是一个错误。

在我看来,C/C++ 社区并不熟悉人类可读的逻辑运算符。因此应该避免它们。

顺便说一句:C++ 标准称它们为三元组和“替代标记”。逻辑运算符替代项在此枚举。

于 2014-06-27T20:56:26.310 回答