Wind River の Web サイトは、Diab コンパイラが C または C++ のいずれかをコンパイルできることを示しています。
C では、&&
演算子はint
、値が0
orの type の結果を返します1
。これは、表示されている警告と一致しています。
1990 年の ISO 標準の時点で、C には組み込み型がありませんでしたbool
。bool
typedef として定義するのが一般的でした。bool
の typedef であるメッセージからunsigned char
、おそらくいくつかのヘッダーに表示されます。1999 年の ISO C 標準では、 と呼ばれる新しい事前定義されたブール型が追加されてい_Bool
ます。識別子は、 に展開されるマクロとしてbool
定義されています。ただし、含まれていない場合は、他の方法で定義できます。<stdbool.h>
_Bool
<stdbool.h>
bool
C++ では、値orを持つ&&
type の結果を生成し、別個の基本型です。これは、少なくとも 1998 年の ISO C++ 標準以降は当てはまります。bool
false
true
bool
コードを C++ ではなく C としてコンパイルしているため、この警告が表示されている可能性が高いと思われます。可能性は低いですが、Diab コンパイラが C++ 標準に完全に準拠していない可能性があります。より厳密に適合するように指示する方法があるかもしれません。
Diab コンパイラは使用していません。通常、特定のファイル拡張子 (通常.c
は C および.cpp
C++ の場合) を使用するか、別のコマンドを使用するか、またはその両方を使用して、コンパイルされる言語を制御できます。
適合する C++ コンパイラとして呼び出す方法については、コンパイラのドキュメントを参照してください。
実験として、コンパイラの呼び出し方法を変更する前に、次の宣言を追加してみてください。
int class;
ソースファイルに。これは C では有効ですが、C++ では構文エラーです (class
は C++ キーワードであるため)。
アップデート:
OPは、彼が間違いなくCとしてではなくC++としてコンパイルしていると言っ&&
てint
いbool
ますunsigned char
。
警告は、コンパイラが準拠していないことを直接示しているわけではありません。コンパイラは、好きなことについて警告することができます。しかし、この警告の内容は、コンパイラのバグ、または少なくともどの C+ にも準拠していないコンパイラを示唆しています。
適合する C++ コンパイラは、このプログラムの診断を生成する必要があります。コンパイラは何をしますか? (ディレクティブは追加しないでください。)#include
int main() {
class dummy { }; // Just to make sure it's C++
bool b;
unsigned char c;
bool* pb = &c; // Invalid conversion
unsigned char* pc = &b; // Invalid conversion
}
そして、このプログラムをコンパイルして実行すると、どのような出力が得られるでしょうか?
#include <iostream>
int main() {
std::cout << "__cplusplus = " << __cplusplus << "\n";
}