質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1469閲覧

キャストの記述について教えてください

ruirui2

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/09/08 08:36

編集2022/09/09 00:45

前提

C言語で開発しています。

実現したいこと

MISRA-Cの指摘を改善したいです。

発生している問題・エラーメッセージ

指摘内容は以下です。

#define FALSE (0U)
unsigned int hogedata;

if(hogedata == FALSE)

キャストが必要なのですが
(1) if(hogedata == (unsigned int)FALSE)
(2) if((bool)hogedata == FALSE)
のどちらが正しいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazto

2022/09/08 08:40

実際試してみてはいかがでしょうか?
int32_t

2022/09/08 08:53

MISRA-Cの指摘は具体的にどんな文面ですか? 本当に質問文にある FALSE が使われていますか?
SaitoAtsushi

2022/09/08 09:04

boolean の定義はどうなっていますか?
ruirui2

2022/09/08 09:15

int32_tさん MISRA-Cの指摘ですが 左側のオペランドの必須型が右側のオペランドと同じではありません との指摘です
ruirui2

2022/09/08 09:24

SaitoAtsushiさん すみません、記述に間違いがありました。 booleanは定義していないので、(2)の記述は if((bool)hogedata == FALSE) になります
int32_t

2022/09/08 09:29

FALSE を 別の名前に変更しても指摘されますか?
SaitoAtsushi

2022/09/08 09:33

MISRA-C の指摘というのは MISRA-C:2012 に準拠したなんらかのツールによる指摘という意味ですか?
ruirui2

2022/09/08 09:40

int32_tさん 試してませんので即答できませんが、試してみます SaitoAtsushiさん はい、Coverityという静的ツールによる指摘です。
jimbe

2022/09/08 09:56

質問は編集出来ますので、間違いや追加情報がありましたら質問本体を修正・追加してください。
thkana

2022/09/08 15:09

Coverityは使ったことないけれど(あの手のツールってクソ高くて...) 一応念のため、 > キャストが必要 という「あなたの解釈」ではなく、指摘メッセージを訳さず略さず"そのまま"示しておいてください。 正直なところ、しれっと「記述に間違いがありました」とおっしゃる方には「他は絶対に元と違っていないのですね?」と聞かざるを得ませんが、大丈夫ですね?
ruirui2

2022/09/09 00:43

thkanaさん すみませんでした、ご指摘、ごもっともです。 私の解釈は不要でしたね。 Coverityの指摘を全て記述すると以下です。 「左側のオペランド”hogedata"(unsigned)の必須型が右側のオペランド"0U"(boolean)と同じではありません」
guest

回答2

0

ベストアンサー

選択肢がそのどちらかに限るのであれば①です。
二項演算子の左右のオペランドの型が異なる場合に C では一定の規則で同じ型に調整されることになっていますが、部分的に結果が未規定になってしまう場合があります。
MISRA-C ではそのような調整に頼らずに同じ型に調整することを是とします。

が、この場合は 0U の型は unsigned int なので両者の型は一致しているはずで、どういう理由でツールがそのような指摘を出しているのかよくわかりません。

投稿2022/09/08 09:41

編集2022/09/08 10:17
SaitoAtsushi

総合スコア5714

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruirui2

2022/09/09 00:49

ツールが0Uをbool型と判断しているのですかね? いずれにしても①というご回答ありがとうございました。
yohhoy

2022/10/03 05:42

FYI: ツールが指摘する「必須型」が essential type の対訳語と仮定すると、FALSE は essentially Boolean と判断されているのかもしれません。方や hogedata は essentially unsigned なので両者は別の essential type という判断基準になっている可能性があります。 http://www.toyo.co.jp/files/user/img/contents/ss/pdf/WP130A-02-13-MISRA-MC3.pdf
yohhoy

2022/10/03 06:01

https://youtu.be/VYlzH60FoeY?t=306 MISRA-C:2012ではPlainなC言語よりも厳格なデータ型モデルを導入して検査するようです。 bool型やFALSE定数といった essentially Boolean と、unsinged int型(essentially unsigned)を直接比較してはいけないというルールのようですね。
guest

0

キャストは不要です
キャストが必要だと判断した根拠はなにかありますか

投稿2022/09/08 11:48

y_waiwai

総合スコア88163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruirui2

2022/09/09 00:53

ありがとうございました。 キャストの必要性についてはツールでの指摘を対応するためです。 ツールを実施した調査結果を報告する際に「指摘箇所あり」のままでは報告できなかったためです。。。
y_waiwai

2022/09/09 01:23

どういうツールのどういう指摘なんでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問