Content-Length: 77352 | pFad | https://srad.jp/comment/2129008
アカウント名:
パスワード:
#define ZERO (1)
それって、if (hoge==TRUE) のような書き方をしている部分があるというのが真の問題では?C言語における真偽値の仕様をわかっていれば、その定義になっていても問題は起こらないはず。
これはC言語かな?
むしろ言語として真偽値がないことの方が問題なような。#そりゃあ古い言語だからねえ……。
>if (flag == TRUE) ...>みたいなコード書く方が悪い。こっちは必ずしも悪くないような。flag が、TRUE, FALSE, UNDEFINED, ERROR みたいな値を取るかもしれないんだから。
この書き方は「あんまり良くない」けれど、C言語だと機能的に制限があるので仕方なかった。
ここはif (flag) {}もしくはif (!flag) {}でしょう。
残念ながらMISRA-Cでは以下の規約に引っかかります。推奨なんで必須では無いんですけどね。
13.2 A オペランドが実質的なブール型である場合を除き、0との比較テストは明示的に行うべきである。
組み込みでCとかだとまず引っかかるんじゃないかな。
"flag"だから「実質的なブール型である」べき。MISRA-Cがコーディングルールだと宣っている現場を見たことがあるが、outputはクソっぽかった。(具体的にはとても外に言えないが)理念を取り入れず外形だけ取り繕うとしているから、常にバグに追いかけられている感じ。
MISRA-Cに遵守するには、下記の3つのステップが必要である。 [openrtp.jp] * どのように各ルールが適用されているかのチェック手法を示す合致マトリクスの作成 * ルールから逸脱する場合の手順 * 作業手順を、品質管理システム中の正式なものにする
が全く無く、ルールに固執して迂回表現を取っていたりするんで、何をやってんだか読みきれないコードが出来上がるという...
"flag"に多値を持ち込んで欲しくないなぁ。
だから「あんまり良くない」とは言ってる。Javaだったらこんなコードは書かないよ。
>DBのNULL値に代表されるようにDBのNULL値はまったく別問題。たぶんまだDBを良く分かってないんだよね。
○○倍とかいう表現をするときに、実際に何かに基づいているわけでもないのに無駄に大きな値を使う人は、大体頭の弱い人であると私は思っている。どうでもいいかもしれんが。
「xxxを256倍使う本」の著者のことですね!
「xxxを256倍使う本」じゃなくて「「xxxを256倍使うための本」だった!
#include <stdbool.h>
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲを呼ぶ -- ある傍観者
Fetched URL: https://srad.jp/comment/2129008
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy
矛盾した定義 (スコア:0)
#define ZERO (1)
Re:矛盾した定義 (スコア:3)
ところが両方を連結すると、とたんに動かない。調査してビックリ。
A社のヘッダーファイル → #define TRUE 1
B社のヘッダーファイル → #define TRUE (-1)
てのがありました。
clausemitz
Re:矛盾した定義 (スコア:1)
Re:矛盾した定義 (スコア:1)
それって、if (hoge==TRUE) のような書き方をしている部分があるというのが真の問題では?
C言語における真偽値の仕様をわかっていれば、その定義になっていても問題は起こらないはず。
Re: (スコア:0)
if (flag == TRUE) ...
みたいなコード書く方が悪い。
真偽値の判定は常にfalse (= 0)と比較すること。
Re:矛盾した定義 (スコア:1)
これはC言語かな?
むしろ言語として真偽値がないことの方が問題なような。
#そりゃあ古い言語だからねえ……。
>if (flag == TRUE) ...
>みたいなコード書く方が悪い。
こっちは必ずしも悪くないような。
flag が、TRUE, FALSE, UNDEFINED, ERROR みたいな値を取るかもしれないんだから。
この書き方は「あんまり良くない」けれど、C言語だと機能的に制限があるので仕方なかった。
Re:矛盾した定義 (スコア:1)
ここは
if (flag) {
}
もしくは
if (!flag) {
}
でしょう。
Re: (スコア:0)
残念ながらMISRA-Cでは以下の規約に引っかかります。
推奨なんで必須では無いんですけどね。
13.2 A オペランドが実質的なブール型である場合を除き、0との比較テストは明示的に行うべきである。
組み込みでCとかだとまず引っかかるんじゃないかな。
Re:矛盾した定義 (スコア:1)
"flag"だから「実質的なブール型である」べき。
MISRA-Cがコーディングルールだと宣っている現場を見たことがあるが、outputはクソっぽかった。(具体的にはとても外に言えないが)
理念を取り入れず外形だけ取り繕うとしているから、常にバグに追いかけられている感じ。
が全く無く、ルールに固執して迂回表現を取っていたりするんで、何をやってんだか読みきれないコードが出来上がるという...
Re: (スコア:0)
Re:矛盾した定義 (スコア:1)
"flag"に多値を持ち込んで欲しくないなぁ。
Re: (スコア:0)
それも十分クソコード臭いが…
DBのNULL値に代表されるように多値論理なんてありとあらゆる害悪の元だろ。んな色々な値がありうる状態の一つにTRUEとかつけちゃダメ。
Re:矛盾した定義 (スコア:2)
だから「あんまり良くない」とは言ってる。
Javaだったらこんなコードは書かないよ。
>DBのNULL値に代表されるように
DBのNULL値はまったく別問題。
たぶんまだDBを良く分かってないんだよね。
Re: (スコア:0)
Re: (スコア:0)
○○倍とかいう表現をするときに、実際に何かに基づいているわけでもないのに無駄に大きな値を使う人は、大体頭の弱い人であると私は思っている。
どうでもいいかもしれんが。
Re: (スコア:0)
Re:矛盾した定義 (スコア:2)
「xxxを256倍使う本」の著者のことですね!
Re:矛盾した定義 (スコア:2)
「xxxを256倍使う本」じゃなくて「「xxxを256倍使うための本」だった!
Re: (スコア:0)
#include <stdbool.h>