質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

4回答

5838閲覧

if文 特殊な条件式が分からない

Susanoo2442

総合スコア153

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

1クリップ

投稿2016/11/17 14:18

単刀直入にお聞きします。
現在、C#でWindowsアプリケーションを作成していますが

ある処理を実装する必要が出てきた為
それに関する情報を調べていました。

その際に

C#

1 if ((aPtr = OpenProcess(ProcessAccessFlags.PROCESS_VM_READ, false, aaa)) == null){ 2 3} 4

このようなif文を見つけました。
結果的にこのif文で処理を実装した所問題なく動作したのですが

今まで見たことがない形式でしたので

if((xx = xxx(xxx, xxx, xxx,)) == null){
}

こちらのif文の条件式について詳細を教えて頂けたらと思います。

自分が最も疑問に思っている点は
ifの条件式の中に関数を入れるのであれば
括弧は両サイド2つづつで良いはずです。
それが3つついている理由が知りたいです。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

内側の(aPtr = OpenProcess(ProcessAccessFlags.PROCESS_VM_READ, false, aaa))部分が、aPtrへの代入となっていて(代入演算子は代入した値を結果として返します)、その結果をNULLと比較しています。

わかりにくいのであれば、2行に分けても構いません。

C#

1aPtr = OpenProcess(ProcessAccessFlags.PROCESS_VM_READ, false, aaa); 2if(aPtr == NULL){ 3 // 中身は省略 4}

投稿2016/11/17 14:24

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Susanoo2442

2016/11/17 14:31

早速の回答ありがとうございます! if文で代入演算子を用いるときの書き方だったんですね! 納得しました! ありがとうございました!
guest

0

ifの条件文を分解して以下と同じことです。

C#

1aPtr = OpenProcess(ProcessAccessFlags.PROCESS_VM_READ, false, aaa); 2if (aPtr == null){ 3//略 4} 5

自分が最も疑問に思っている点は
ifの条件式の中に関数を入れるのであれば
括弧は両サイド2つづつで良いはずです。
それが3つついている理由が知りたいです。

条件式の演算子の優先順位を明確にするために括弧を書かれているのでしょう。
括弧があるのとないのとではコードの可読性に雲泥の差があります。

if (var = func() == null) {}というコードがあった場合
if (var = (func() == null)) {} なのか if ((var = func()) == null) {}なのかちょっと考えないと判りませんので。

投稿2016/11/17 14:22

編集2016/11/17 14:31
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

https://msdn.microsoft.com/ja-jp/library/aa691323(v=vs.71).aspx

上記サイトによると"="と"=="の優先順位は"=="の方が高いです。
優先順位が高い演算子が優先的に評価されます。
したがって、

aPtr = OpenProcess(ProcessAccessFlags.PROCESS_VM_READ, false, aaa) == null

↑のような式があると、

aPtr = (OpenProcess(ProcessAccessFlags.PROCESS_VM_READ, false, aaa) == null)

と解釈されます。
これを防ぐため、

(aPtr = OpenProcess(ProcessAccessFlags.PROCESS_VM_READ, false, aaa)) == null

として、"="を先に評価するようにしていると思います。

3+2*4という式があれば、このまま計算すると掛け算が先に行われるので11になりますが、
(3+2)*4とすることで"+"を先に評価するようにしているのと同じです。

投稿2016/11/18 21:52

otaks

総合スコア223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

関数を呼び出して戻り値を変数に代入する。
x = func();
この変数の値によって条件分岐する。
if(VALUE == x){
}

この2つの処理を一つにまとめています。

投稿2016/11/17 14:29

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問