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

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

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

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

C++

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

Q&A

3回答

3940閲覧

Visual Studio CodeでC++のファイルを保存する時(整形時)に行末にセミコロンを自動で挿入したい

soo

総合スコア80

Visual Studio

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

C++

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

0グッド

0クリップ

投稿2020/05/28 06:05

Visual Studio CodeでC++を書いています。

vscode-cpptoolsを導入することでほとんど快適にコーディングはできています。
https://github.com/microsoft/vscode-cpptools

1点だけコードの整形時に行末に自動的にセミコロンを挿入してくれる機能がないか探しています。
JSを書いているときはPrettierで同様の機能を実現できているのですがC++ではできないのでしょうか?
出来る方法があれば教えてほしいです

例(整形前)

cpp

1int main() { 2 int a 3 int b 4 return 0 5}

例(整形後)

cpp

1int main() { 2 int a; 3 int b; 4 return 0; 5}

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

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

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

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

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

cateye

2020/05/28 09:07

for( int i=0; i < N; i++) sum += ary[i]; と言った文の時に for( int i=0; i < N; i++); にしたいのですか?
guest

回答3

0

技術的には可能だろが、「整形」の範囲を逸脱する(意味を変えてしまうかもな)のでやって欲しくないし、あっても僕は使わない。

C++

1// ほかにはたとえば: 2std::string message[] = { 3 "Hello " // ココに(勝手に) , を付けられると意味が変わる。 4 "world" 5};

投稿2020/05/28 10:15

編集2020/05/28 10:18
episteme

総合スコア16612

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

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

0

(他者の回答のコメント欄に書くのは辛いので,分けました)

例えば,以下の様な場合はどうなんでしょう.
勝手にセミコロンを補われてしまったら,解明困難なバグを生じることになりそうです.

文法的には正しい形にされてしまうわけで,

仮に意図しない位置にセミコロンが挿入されたときは手動で直します

というのは,実際は結構つらいと思います.

C++

1int G = 0; 2void Func() 3{ 4 //このままだとダメなのだが, 5 //aの後にセミコロンを勝手に補うべきなのであろうか? 6 //本当に必要なのはカンマかもしれない. 7 int a 8 G = 8; 9 10 ... 11}
  • 「整形」機能なのであれば,コードの「意味」は変えないでほしい.
  • そもそもC++書いててセミコロンを付け忘れるというのは極めて稀であろうし,
    そこそこまともなエディタを使っていれば改行時点でインデントが狂うとかするだろうから,そこの時点で気付く.
    気づかずにコンパイルエラーまで行ったとしても,そこで直せばいいだけ.

投稿2020/05/28 07:33

編集2020/05/28 07:43
fana

総合スコア12175

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

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

soo

2020/05/28 07:49

具体例をありがとうございます。 さらに理解が深まりました。
fana

2020/05/28 07:52

(セミコロンの話に限らず) コンパイルエラーの文面が「ここって,こうなんじゃねーの?」とまで言えるなら, 【「こうすればよくね?」っていう改善案が提示されて,それを人間が選択したらそのように該当部を修正する】 みたいな形の機能なら,(使うかどうかは別として)あっても良いかな,とは思います.
soo

2020/05/28 07:56

Visual Studio CodeやXcodeなどのIDEでそのような機能はありますね
maisumakun

2020/05/28 07:56

エディタ組み込みのLinterだとよくありますね>修正候補の提案
fana

2020/05/28 08:03

仮に,ここで挙げたような例ですら「何故かうまくやってくれる」安心安全な機能が存在したとして, > C++書いててセミコロンを付け忘れるというのは極めて稀 だと思ので, > 需要 に関して言えば,やはり相当低いものになるかな…と.
soo

2020/05/28 09:29

エディタに警告が出る、整形が崩れる、コンパイルエラー等ですぐに気づくことはできますがセミコロンをつけ忘れることは頻繁にあります。 PythonやSwift等のセミコロンが必要ない言語に慣れているのでセミコロンのつけ忘れを修正することがめんどくさく思えてしまったので質問した次第です。
dodox86

2020/05/28 09:47

回答はしませんでした(<できるほどのVisual Studio Codeへの知識が無かった)が、興味深く質問回答の行方を注視させていただいていました。 > 整形」機能なのであれば,コードの「意味」は変えないでほしい. こちらに強く同意しますね。セミコロン1文字だけでも行に変更が生じて、ソースコード修正の際の差分確認にも支障が出そうです。少なくとも私個人的にはまず使わない機能になりそうです。
guest

0

JSを書いているときはPrettierで同様の機能を実現できているのですがC++ではできないのでしょうか?

大きな違いとして、JavaScriptでは行末セミコロンを省略できるのに対して、C++では書かなければならないということがあります。

セミコロンを書かない、文法的に正しくないC++コードを整形するプログラムは、おそらくないかと思います。

投稿2020/05/28 06:13

maisumakun

総合スコア146583

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

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

soo

2020/05/28 06:41

> セミコロンを書かない、文法的に正しくないC++コードを整形するプログラムは、おそらくないかと思います。 無いということですが、技術的に不可能ということでしょうか? JavaScriptdで出来るのでC++でも出来るのかと思います。 このような機能に需要は無いのでしょうか?
soo

2020/05/28 06:44

文法的に正しくないC++コードでもパースして適切であろう位置にセミコロンを挿入してほしいと思っています。 仮に意図しない位置にセミコロンが挿入されたときは手動で直します。JavaScriptdでもセミコロンの位置でプログラムの挙動が変わるので元がセミコロンを省略できる言語だからかどうかは関係しないと思いました。
maisumakun

2020/05/28 06:45

> このような機能に需要は無いのでしょうか? JavaScriptよりは少ないでしょう。
maisumakun

2020/05/28 07:14

> 技術的に不可能ということでしょうか? もちろん技術的には可能ですが、「余計なおせっかいはできるだけ排除する」というC++の文化とは相容れないものです。
fana

2020/05/28 07:19

> このような機能に需要は無いのでしょうか? いつ欲しくなる機能なのかが謎です. 「あえてわざわざ > 例(整形前) のような形にコーディングして,後で機械的にセミコロンをまとめて付けてもらう」 というスタイル? 「(何故か)セミコロンが無い個所がもうほんと大量すぎるコードが目の前に降ってきて人力で直すのがとてもつらい!」という場面ならば機械的にやってほしいだろうけども,まずそのような事態に直面するか?という疑問が先に来ます.
maisumakun

2020/05/28 07:21

> 文法的に正しくないC++コードでもパースして適切であろう位置にセミコロンを挿入してほしいと思っています。 正しく解釈されない(もしかしたら意図しない形で動作してしまうかもしれない)リスクを背負い込んでまでやりたいことなのですか?
soo

2020/05/28 07:31

> もちろん技術的には可能ですが、「余計なおせっかいはできるだけ排除する」というC++の文化とは相容れないものです。 こちらは検索しても出てこなかったのですがそういう文化があるのでしょうか? 文化に関して何かWebの記事があれば教えて下さい。 個人的にはコードフォーマッターを使うこととそこまで変わらないことという感覚で質問しました。
soo

2020/05/28 07:31

> いつ欲しくなる機能なのかが謎です. 例は説明をわかりやすくするために書いたものです。 セミコロンを書かないコーディングスタイルを想定しているのではなく、つけ忘れたときは自動で挿入してほしいです。 JavaScriptでは普通のことかと思いますので需要がまったくないということは無いと思います。
maisumakun

2020/05/28 07:33

> JavaScriptでは普通のことかと思いますので需要がまったくないということは無いと思います。 いえ、JavaScriptは「それも正当なコード」なので、前提条件が全く異なります。
soo

2020/05/28 07:34

> 正しく解釈されない(もしかしたら意図しない形で動作してしまうかもしれない)リスクを背負い込んでまでやりたいことなのですか? これはPrettierにも言えることではないでしょうか? リスクによりますが普通にコーディングしてれば意図した動作になるようにセミコロンを付けれるのではないでしょうか。
maisumakun

2020/05/28 07:36

> これはPrettierにも言えることではないでしょうか? いえ、違います。Prettierではデフォルトで「文法的に同一」の範囲内で整形するものです。
maisumakun

2020/05/28 07:39

sooさんが「セミコロンを省略できるC++」の文法を厳密に定めるのなら話は別ですが、「文法的に成立しない」ということは、「正しい意味を取れない」ということです。 正しい意味がはっきりしていてそれを変換するのと、正しい意味がはっきりしないものを推測して動かすのでは、ぜんぜん別世界の話となります。
YAmaGNZ

2020/05/28 07:41

sooさんの思いとしては、「セミコロンだけが抜けている正しいコードを整形するのが変?」って感じなのではないでしょうか? この話は言い方を変えると、「本来コンパイルエラーで発見できるバグを握りつぶしてユーザーに認識させない」ってことではないでしょうか。
soo

2020/05/28 07:46

> sooさんが「セミコロンを省略できるC++」の文法を厳密に定めるのなら話は別ですが、「文法的に成立しない」ということは、「正しい意味を取れない」ということです。 > > 正しい意味がはっきりしていてそれを変換するのと、正しい意味がはっきりしないものを推測して動かすのでは、ぜんぜん別世界の話となります。 よくわかりました。ありがとうございます。 需要がなさそうなことについてももわかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問