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

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

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

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

Q&A

解決済

1回答

2383閲覧

VS code code runnerで実行ができない

msfb8220

総合スコア1

C

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

0グッド

0クリップ

投稿2021/05/07 15:12

VS code code runnerで実行ができません。
settings.jsonでは"&&"と書かれているところが"; if ($?)"に変換されているようです。
なぜこうなるのでしょうか。
解決策はあるでしょうか。

ちなみに、手打ちでコマンドプロンプトに

cmd

1gcc -fexec-charset=CP932 -o hello hello.c && hello

と打つとコンパイル、実行までしてくれます。
上記のように入力されるにはどのようにすればよいでしょうか。

コマンドプロンプトでの結果

cmd

1H:\pgm_code\gcc>cd "h:\pgm_code\gcc\" ; if ($?) { gcc -fexec-charset=CP932 hello.c -o hello } ; if ($?) { "h:\pgm_code\gcc\" hello } 2ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。

setting.json上でのコード

json

1"c": "cd $dir && gcc -fexec-charset=CP932 $fileName -o $fileNameWithoutExt && $dir $fileNameWithoutExt"

ソースファイルはカレントディレクトリ直下にあるので、

json

1"c": "gcc -fexec-charset=CP932 $fileName -o $fileNameWithoutExt && $fileNameWithoutExt"

このように書くと

cmd

1H:\pgm_code\gcc>gcc -fexec-charset=CP932 hello.c -o hello ; if ($?) { hello } 2gcc: error: ;: No such file or directory 3gcc: error: if: No such file or directory 4gcc: error: ($?): Invalid argument 5gcc: error: {: No such file or directory 6gcc: error: hello: No such file or directory 7gcc: error: }: No such file or directory

というようなエラーが表示されます。
やはり、&&が変換されていることが問題だと思われます。

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

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

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

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

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

dodox86

2021/05/07 23:57

実行時のターミナルがコマンドプロンプト(cmd)ではなく、PowerShellで実行することが前提なのでは。 if ($?) { } は、直前のコマンド実行が成功(True)であれば{}内を実行するというPowerShellで使える構文です。
msfb8220

2021/05/08 03:16 編集

回答していただき、ありがとうございます。 PowerShellで使える構文なのですか。勉強になりました。 できれば、PowerShellではなく、コマンドプロンプトで実行したいと思っています。 コマンドプロンプトで実行するようにする方法はありますでしょうか。 追記 実際にPowerShellで実行したところ、少し変更はありましたが、実行することができました。 ですが、コマンドプロンプトで実行する方法を知りたいです。 settings.jsonの内容がPowerShellようになっているということなのでしょうか。 "既定のターミナルのプロファイルを選択する"の中で、PowerShellだけが検出済みとなっていることが関係しているのでしょうか。
Bull

2021/05/10 00:42

この settings.json は、現在 VScode で開いているフォルダー (ワークスペース) のものでしょうか? それともユーサーのものでしょうか? いろいろと条件があるようですが、ユーザー側の settings.json に記述されているとこのようになることがあるようです。ワークスペース側だとこのような変換は行われないようです。
msfb8220

2021/05/11 13:12 編集

回答していただき、ありがとうございます。 貼っていただいたURLを参考にsettigns.jsonを書き換えたところ、"&&"の問題が解決しコマンドプロンプトで実行することができました。 ありがとうございます。 しかし、 This is deprecated, use `#terminal.integrated.defaultProfile.windows#` instead と注意を促されます。 これは`#terminal.integrated.defaultProfile.windows#` を使用するのを推奨していないということでしょうか。 また、VS codeを開くたびに 「ターミナル プロセスが起動に失敗しました: シェル実行可能ファイル "C:\WNDOWS\system32\cmd.exe" へのパスが存在しません。」 と表示されます。無視して実行すればプログラムは動作しますが。 貼っていただいたサイトのほうではこのことについて触れていませんでしたが、code runner側が対応するまで放置でも大丈夫なのでしょうか。 とりあえず、私の問題は解決いたしました。 回答して頂いた皆様、ありがとうございました。
guest

回答1

0

自己解決

貼っていただいたURLのサイトを参考にし、settings.jsonに下記のコードを打ちこむことで、コマンドプロンプトで実行することができました。

json

1"terminal.integrated.shell.windows": "C:\WNDOWS\system32\cmd.exe",

ただ、

This is deprecated, use #terminal.integrated.defaultProfile.windows# instead

と問題も生じ、VS codeを開くたびに
「ターミナル プロセスが起動に失敗しました: シェル実行可能ファイル "C:\WNDOWS\system32\cmd.exe" へのパスが存在しません。」
と表示が出てきます。
無視すれば実行できます。
この問題はサイトにもあるようにcode runnerの対応を待ちます。

回答して頂いた方々へ感謝を申し上げます。

2021/5/16 追記
下記のコマンドを入力しなくても、コマンドプロンプトで実行することができました。
code runnerの方で対応してくれたのでしょう。

json

1"terminal.integrated.shell.windows": "C:\WNDOWS\system32\cmd.exe",

これにより、新たに生じた問題も解決しました。

投稿2021/05/11 13:29

編集2021/05/16 08:04
msfb8220

総合スコア1

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問