[明らかに] 条件が真の場合にのみ実行される if ステートメントがあります。この if ステートメントの後には、常に実行する必要があるコードがあり、その後に、最初と同じ条件で実行する必要がある別の if ステートメントがあります。
中央のコードは、スタックの特定の要素を使用して操作を実行しています。どちらかの側の if は、それぞれ操作の前後にスタックでプッシュ/ポップを実行します。
したがって、ロジックは次のようになります。
- スタックをプッシュする必要がありますか? はい・いいえ
- スタック上で操作を実行する
- スタックはプッシュされましたか? (はいの場合はポップ)
1と3は同じ状態です。
これは、C ++でこれを行うために最初に書いたコードです
#include <stdio.h>
#include <stdlib.h>
int somefunction(){
return rand() % 3 + 1; //return a random number from 1 to 3
}
int ret = 0;
//:::::::::::::::::::::::::::::::::::::::
// Option 1 Start
//:::::::::::::::::::::::::::::::::::::::
int main(){
bool run = (ret = somefunction()) == 1; //if the return of the function is 1
run = (run || (ret == 2)); //or the return of the function is 2
if (run){ //execute this if block
//conditional code
if (ret == 1){
//more conditional code
}
}
//unconditional code
if (run){
//even more conditional code
}
}
//:::::::::::::::::::::::::::::::::::::::
// Option 1 End
//:::::::::::::::::::::::::::::::::::::::
これを書いた後、これを行う方が効率的かもしれないと思いました:
//:::::::::::::::::::::::::::::::::::::::
// Option 2 Start
//:::::::::::::::::::::::::::::::::::::::
int main(){
bool run;
if (run=(((ret = somefunction()) == 1)||ret == 2)){ //if the return of the function is 1 or 2 then execute this if block
//conditional code
if (ret == 1){
//more conditional code
}
}
//unconditional code
if (run){
//even more conditional code
}
}
//:::::::::::::::::::::::::::::::::::::::
// Option 2 End
//:::::::::::::::::::::::::::::::::::::::
最初の方法はいくつかの行に分割されているため、読みやすさを優先しますが、2 番目の方法では同じ行に 2 つの代入 (=) と 2 つの比較 (==) があります。2 番目の方法を使用する方がよいかどうか (効率または実行可能サイズの理由から)、または両方よりも優れた方法があるかどうかを知りたいです。
ほとんど計り知れないほどの違いしかないと誰かが言う前に、これは 1/50 秒以内に何千回も実行しなければならない巨大なループにあるので、できるだけ多くの時間を節約したいと思います。