if(A == 0 ||
B == 5 ||
C >= 4 ・・・) ;
みたいにいくつかの条件のうちあてはまってたら処理をすると書くのが普通ですが
A == 0,B == 5,C >= 4 ・・・等のように条件を書いてソースを見やすくはできないでしょうか?
このようなやり方でなくてもソースが短く見やすく書ければ助かります。
C++ VS2005 XP
#define IF_OR2(b1,b2) if((b1)||(b2)) #define IF_OR3(b1,b2,b3) if((b1)||(b2)||(b3)) #define IF_OR4(b1,b2,b3,b4) if((b1)||(b2)||(b3)||(b4)) #define IF_OR5(b1,b2,b3,b4,b5) if((b1)||(b2)||(b3)||(b4)||(b5)) #define IF_OR6(b1,b2,b3,b4,b5,b6) if((b1)||(b2)||(b3)||(b4)||(b5)||(b6))とマクロ定義(上記は6条件まで用意)して、
IF_OR3(A == 0,B == 5,C >= 4)で出来ます。(ちょっと使いづらいと思いますが)
//条件---------------------------
bool A = ( a != 0 ) ;//aは0以外よ
bool B = ( b == 5 ) ;//bは5なんだ
bool C = ( c >= 4 ) ;//cは4以上じゃ
bool D = ・・・・・
if( A || B || C ・・・・){
・・・・・
・・・
}
こんなのはどうでしょうか?#include <stdio.h>
int main(void)
{
int n;
printf("数字を入力してねっ -> "), scanf("%d", &n);
/* 普通のif文 */
if (n < 0 || n == 5 || 8 < n)
{
printf("にゃんにゃん\n");
}
/* &&演算子の式評価に依存してみる */
(n < 0 || n == 5 || 8 < n) && printf("あぅあぅ\n");
return 0;
}
で、書いてみて思ったこと。大して見やすくならない(笑)#define hoge(a,b,c,d) (((a)<8 && (a)>-1) && ((b)<8 && (b)>-1) && ((c)[(a)][(b)]==(d)))
if(hoge(a,b,c,d))
puts("あーだこーだ");
こんなんですかね#include<cstdio>
using namespace std;
class Bool_op{
bool b;
Bool_op():b(false){}
Bool_op& operator,(bool op){
b=b||op;
return *this;
}
operator bool(){bool temp=b;b=false;return temp;}
}bool_expr;
int main()
{
int a,b,c;
printf("適当に整数を3個入力してください:");
scanf("%d%d%d",&a,&b,&c);//適当に整数を入力させる。
if(bool_expr,a!=0,b==5,c>=4)puts("条件に合致しました");
else puts("残念ながら、条件に合致しませんでした。");
return 0;
}
カンマ演算子(呼び方合ってるかな?)はオーバーロードできるので、適当にクラスを用意して、それとboolに対してオーバーロードしています。