FAQ

QA・C/QA・C++

QA・C++ 特有のFAQ

ID.

Q. 変数名に and や or を使用すると解析できないのでしょうか? QA・C++ の全バージョン

A.


ISO C++違反の構文であるため解析することができません。理由は次の通りです。

ISO C++言語規格書の2.5-2には次のように記されています。

代替字句は, その綴りの違いを除いて, 言語のすべての面で, 正規字句と完全に 同等に振る舞う。代替字句は, 表2に示すとおりとする。表2 代替字句
 代替   正規   代替   正規 
 and   &&   and_eq   &= 
 bitor   |   or_eq   |= 
 or   ||   xor_eq   ^= 
 xor   ^   not   ! 
 compl   ~   not_eq   != 
 bitand   &     

一般的には"正規"欄に記述された字句を使用しますが、 C++ではこれらの字句の代わりに、"代替"欄に記述された字句を使用 することができます。具体的には、一般的に次のように記述するコードを void func(int a, int b) { if( a && b ) { } }次のように記述することができます。 void func(int a, int b) { if( a and b ) { } }このように、ISO C++では代替字句が正規字句と完全に同等に振る舞うことを 要求しているので、これらの代替字句を変数名や関数名の代わりに 使用することはできません。例: void func(void) { int and; // C++では int &&と同等 }QA C++はISO C++に従って解析するので、上記の構文をエラー として扱います(該当箇所には14番の警告などが出力されます)。
恐れ入りますが、代替字句を変数名や関数名として使用している場合は、 名称を変更して解析できるようにしてください。

<< QA・C++ 特有のFAQに関するFAQ一覧へ戻る