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

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

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

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3198閲覧

Visual Studio 2015 のコード整形が正しく行われない

lpha-z

総合スコア7

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2016/01/09 18:51

Microsoft Visual Studio Community 2015でC++の開発を行っています。
Visual Studioでは自動コード整形機能があり、[ツール]→[オプション]→[テキスト エディター]→[C/C++]→[書式設定]で設定が変更できますが、[スペース]の項にある[演算子のスペース]→[バイナリ演算子]で[バイナリ演算子の前後にスペースを挿入する]を設定しても、期待通りに働きません。

具体的には、以下のようになります。

C++

1int a; 2int b; 3 4// case 1 5a + b; 6a - b; 7a*b; 8a / b; 9a%b; 10a | b; 11a^b; 12a&b; 13a&&b; 14a < b&&c < d; 15a || b; 16 17// case 2 18a + ( b ); 19a - ( b ); 20a*( b ); 21a / ( b ); 22a % ( b ); 23a | ( b ); 24a ^ ( b ); 25a&( b ); 26a && ( b ); 27a || ( b ); 28 29// case 3 30(a)+b; 31(a)-b; 32(a)*b; 33( a ) / b; 34( a ) % b; 35( a ) | b; 36( a ) ^ b; 37(a)&b; 38( a ) && b; 39( a ) || b;

以上のテストから、
0. ,%,&,^,&&の5種類の二項演算子で前後にスペースが挿入されない(case 1)
0. かっこで囲まれた式がある場合は
,&のみで発生する(case 2)
0. 前にかっこがある場合、Cスタイルのキャスト+単項演算子とみなされてしまう(case 3)が、case1の+,-の場合にはちゃんと前後にスペースが挿入されているため、単項演算子と混同されてしまうことが原因ではなさそう

であると推測しましたが、解決策はわからないままです。
どうかよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

友人と議論したところ、*はポインタ、&は参照、&&は右辺値参照、^はC++/CLIのハンドル、%はC++/CLIの追跡参照の構文で使われており、case1ではそれらの宣言文、case2ではそれらの関数形式キャストと認識されているとの結論に至りました。ただし、a < b&&c < d; はこれらに一致しません(テンプレートとの勘違いの可能性も含めて、a + b&&c + d;もテストしましたが、これも同じ結果でした)。
これらは構文解析までの段階では全く区別がつかず、スペーシングは即時性が求められるため意味解析を行う前(構文解析まで)の段階で行っているのだとすると、この結果は妥当です。

Visual Studio 2015以降でこれらが解決することを祈って、この質問は解決とさせていただきます。

投稿2016/01/13 15:00

lpha-z

総合スコア7

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

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

0

ベストアンサー

こんにちは。

MSVC2015で確認でき、MSVC2013でも同様な現象でした。しかし、C#なら*や%でもスペースが挿入されました。どうもC++用エディタの不具合っぽいです。
英語でこのメニューは"Insert spaces before and after binary operators"となるのですが、この文字列でググっても情報がでてきません。解決は難しそうです。


しかし、マイクロソフトはバイナリ演算子ではなく2項演算子と訳すればよいのにって思っちゃいます。
恥ずかしながら、ビットごとの演算子かと勘違いしてしまいました。

投稿2016/01/11 05:16

Chironian

総合スコア23272

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

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

lpha-z

2016/01/13 14:51

ありがとうございます。C#ならこのようなことは起こらないのですね。 英語でググってみても出てこないということは、誰もこのようなことを気にしていないのでしょうか……。 余談ですが、バイナリ演算子と訳すなど、マイクロソフトの日本語訳は意味は分かるものの文脈に即していないものが多いような気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問