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

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

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

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

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

Q&A

3回答

3582閲覧

C言語 VScodeエラー

ryouk

総合スコア4

C

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

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

0グッド

1クリップ

投稿2021/05/01 13:19

編集2021/05/02 00:21

前提・実現したいこと

VScodeでC言語の環境構築をしているのですがエラーが出てうまくコンパイルできません。

発生している問題・エラーメッセージ

cc1.exe: error: no iconv implementation, cannot convert from UTF-8 to CP932

該当のソースコード

C言語

1/* 画面に何か表示するプログラム */ 2#include <stdio.h> 3int main(void) 4{ 5 printf("hello world\n"); 6 return 0; 7}

試したこと

インターネットでこのエラーをコピーして検索したが、初心者のため何を書いているのかよくわかりませんでした。

補足情報(FW/ツールのバージョンなど)

PCはwindows10を使用しています。
コンパイラはgccを使用しています。

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

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

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

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

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

jbpb0

2021/05/01 21:12

コンパイラは、何を使ってますか?
cateye

2021/05/01 22:43

Windowsは使ってないのでよく分からないのですが、取り敢えずシフトJISでソースを保存してみましょう。
ryouk

2021/05/02 00:10

gccを使っています!
ryouk

2021/05/02 00:20

シフトJISでやっても同じエラーが発生しました。。
jbpb0

2021/05/02 00:31 編集

ソースコードから、全ての「全角文字」を削除してみてください 日本語だけでなく、全角スペースや全角の記号も削除
ryouk

2021/05/02 00:45

削除したのですが、同じエラーが発生します。。
jbpb0

2021/05/02 01:37 編集

全ての「全角文字」を削除したソースコードを、適当なファイル名(「testgcc.c」とか)で保存して、コマンドプロンプトで下記を実行したら、どうなりますか? cd ソースコードファイルがあるディレクトリ gcc ソースコードファイル名
ryouk

2021/05/02 07:03

指定されたパスが見つかりません。とでます。
ryouk

2021/05/02 07:05

見たのですが、MinGW のディレクトリにある installed.ini にインストールしたファイルが記されていますが、gcc-core-3.4.5-20060117-3.tar.gz だとだめなようです。ためしに古いファイル gcc-core-3.4.5-20060117-1.tar.gz を持ってきてその中の libexec/gcc/mingw32/3.4.5/cc1.exe で上書きすると、正しくコンパイルできるようになります。 この部分が理解できませんでした。。
jbpb0

2021/05/02 07:06

> 指定されたパスが見つかりません。 が出るのは、cd, gccどちらを実行したときですか?
ryouk

2021/05/02 07:14

cdを使用したときで gccを使用すると英語でエラーのようなものがでます。
jbpb0

2021/05/02 07:43 編集

> cdを使用したとき それなら、cdで指定してるディレクトリのパスが間違ってます Windowsのエクスプローラーでソースコードファイルを保存したディレクトリを開いて、ディレクトリのパスをコピーして、コマンドプロンプトにペーストするのが、確実です 参考 https://www.koikikukan.com/archives/2014/03/18-015555.php
ryouk

2021/05/02 07:21

環境変数の編集で指定するPathが間違っているという事でしょうか?
jbpb0

2021/05/02 07:45 編集

> 環境変数の編集で指定するPathが間違っているという事でしょうか? 「指定されたパスが見つかりません。」がcd実行時のエラーならば、それは関係無いです 【追記】 cdはエラーが出ずに実行できて、gccを実行した時に「そんなの見つからない」的に怒られたなら、環境変数Path指定が間違ってます
ryouk

2021/05/02 07:53

ディレクトリ名が無効です。とでました。
jbpb0

2021/05/02 07:55

> ディレクトリ名が無効です。とでました。 何の時ですか? 何をしたらどうなったのかを書いてください
ryouk

2021/05/02 07:59 編集

コマンドプロンプトにcdを実行したときに出ました。 Windowsのエクスプローラーでソースコードファイルを保存したディレクトリを開いて、ディレクトリのパスをコピーして、コマンドプロンプトにペーストするのが、確実です。を行ったときです。
jbpb0

2021/05/02 08:09 編集

C言語のソースファイルを、デスクトップに保存してください コマンドプロンプトで、下記を実行してください (XXXは、実際のユーザー名に合わせてください) cd C:\Users\XXX\Desktop そうすれば、エラー出ないはずです 【追記】 もしユーザー名にスペースが入ってる場合は、下記のようにしてください cd "C:\Users\XXX YYY\Desktop"
ryouk

2021/05/02 08:13

エラー発生しませんでした。 \Users\XXXX\OneDrive\ドキュメント\gcc と出ました。
jbpb0

2021/05/02 08:23

> エラー発生しませんでした。 \Users\XXXX\OneDrive\ドキュメント\gcc と出ました。 状況がよく分かりません cd ... は、エラー出なかったのですか? もしcdでエラー出なかったなら、その後で gcc ソースファイル名 を実行したら、どうなりますか? たとえば、ソースファイル名が「testgcc.c」なら、 gcc testgcc.c とやります gccが正常に実行できたら、ソースファイルがあるディレクトリに「a.exe」というファイルができます もし「a.exe」ができたなら、 コマンドプロンプトで a.exe を実行してみてください
ryouk

2021/05/02 08:33 編集

a.exeというファイルができました。 ですがコマンドプロンプトでa.exeを実行すると C險€隱槭・鄙偵≧繧医j諷」繧後h といったものが出てきました。 ファイルのエンコードをUTF-8からShift-jisに変更すると は、実行中の Windows のバージョ ンと互換性がありません。コンピューターのシステム情報を確認してから、ソフトウェアの発行元に問い合わせてください。と出ました。
jbpb0

2021/05/02 08:38

> a.exeというファイルができました。 gcc単独で実行したら、コンパイルはできますね gcc単独でならエラー出ずにコンパイルできるのなら、この質問に書かれてるエラーは、おそらくVS Codeがgccを実行する際に何か余計なオプションを付けていて、そのために発生しているのだと思いますので、VS Codeの設定を見なおせば、エラー出なくできるかもしれません > コマンドプロンプトでa.exeを実行すると C險€隱槭・鄙偵≧繧医j諷」繧後h a.exeを実行したら、「hello world」と表示されるはずなのですけど、変ですね コンパイルしたC言語のソースファイルの内容は、コメントと全角文字を全部削除したので、現状は下記のようになってますよね? (インデントが消えて表示されますが、そこは気にしないでください) #include <stdio.h> int main(void) { printf("hello world\n"); return 0; }
ryouk

2021/05/02 08:45

ソースファイルの内容はそのままです。 a.exeで実行しても実行中の Windows のバージョ ンと互換性がありません。コンピューターのシステム情報を確認してから、ソフトウェアの発行元に問い合わせてください。と出ました。 これはどういう意味なのでしょうか。
jbpb0

2021/05/02 08:58 編集

> 実行中の Windows のバージョ ンと互換性がありません。コンピューターのシステム情報を確認してから、ソフトウェアの発行元に問い合わせてください。 が出るのは、gccの実行時ですか? それとも、a.exeの実行時ですか? ファイル中に日本語等の全角文字や特殊な記号等が無いなら、UTF-8とShift-jisで違いは無いはずなので、そこ変えて保存し直してもファイルとしては同じはずだから、コンパイルしたものに違いは無いはずなのです にもかかわらず、ソースファイルの保存がUTF-8かShift-jisかで、コンパイルしてできたa.exeに違いが発生するということは、ソースコード内のどこかに変な文字が残っていないでしょうか? 【追記】 「ソースファイルの内容はそのままです。」の「そのまま」とは、私が書いたような、コメントと全角文字を全部削除した状態、という意味ですよね? もしそうでないなら、一度私が書いた状態にして、試してみてください
jbpb0

2021/05/02 09:03

> 実行中の Windows のバージョ ンと互換性がありません。コンピューターのシステム情報を確認してから、ソフトウェアの発行元に問い合わせてください。 は、たとえば下記のような場合に発生します ・32bit Windows上で64bit exeを実行しようとした ・CPUがArmなのにインテル用exeを実行しようとした exeのbitや、exeが対応するCPUの種類は、ソースファイルの保存の文字コード設定で変わるようなものではないので、保存がUTF-8かShift-jisかでそれが発生したりしなかったりというのは、何が起きてるのか分かりません
ryouk

2021/05/02 09:27 編集

実行中の Windows のバージョ ンと互換性がありません。コンピューターのシステム情報を確認してから、ソフトウェアの発行元に問い合わせてください。が出るのはa.exeの実行時です。 ソースファイルの保存がUTF-8かShift-jisかで、コンパイルしてできたa.exeに違いは発生しませんでした。「そのまま」とは、コメントと全角文字を全部削除した状態です。保存がUTF-8かShift-jisかでそれが発生したりしなかったりというのはありませんでした。
jbpb0

2021/05/02 09:30

> 保存がUTF-8かShift-jisかでそれが発生したりしなかったりというのはありませんでした。 それでしたら、 > コマンドプロンプトでa.exeを実行すると C險€隱槭・鄙偵≧繧医j諷」繧後h といったものが出てきました。 ファイルのエンコードをUTF-8からShift-jisに変更すると は、実行中の Windows のバージョ ンと互換性がありません。コンピューターのシステム情報を確認してから、ソフトウェアの発行元に問い合わせてください。と出ました。 の意味が、よく分かりません a.exeを実行したら > C險€隱槭・鄙偵≧繧医j諷」繧後h が表示される場合と、 > 実行中の Windows のバージョ ンと互換性がありません。コンピューターのシステム情報を確認してから、ソフトウェアの発行元に問い合わせてください。 と表示される場合があるのですよね? 両者の違いは、何でしょうか? (何を変えたら、表示が変わるのか?)
ryouk

2021/05/02 09:35

最初はC險€隱槭・鄙偵≧繧医j諷」繧後hと表示されたのですがUTF-8かShift-jisどちらでやってもそのような表記は出なくなりました。 現在はa.exeと実行すると 実行中の Windows のバージョ ンと互換性がありません。コンピューターのシステム情報を確認してから、ソフトウェアの発行元に問い合わせてください。とでます。
ryouk

2021/05/02 09:42

最初はコマンドプロンプトでa.exeを実行すると C險€隱槭・鄙偵≧繧医j諷」繧後h といったものが出てきました。 ですが現在はファイルのエンコードをUTF-8からShift-jisどちらでも上記のようなものは出ず、実行中の Windows のバージョ ンと互換性がありません。コンピューターのシステム情報を確認してから、ソフトウェアの発行元に問い合わせてください。 というものが出ます。 わかりにくくて申し訳ありません。
jbpb0

2021/05/02 09:44

> 最初はC險€隱槭・鄙偵≧繧医j諷」繧後hと表示されたのですがUTF-8かShift-jisどちらでやってもそのような表記は出なくなりました。 その間、何かしてませんか? 何もしなくて、同じことをやったのに結果が違うということは、通常考えにくいのですが 今a.exeを削除して、再度gcc ...を実行したら、a.exeはできますか? できるなら、そのa.exeを実行したら、どうなりますか? あと、gcc -vの結果は、「2021/05/02 17:17」の質問のコメントに書いたときと、現状で全く同じですか?
ryouk

2021/05/02 09:54

a.exeを削除してもう一度試してみるとコマンドプロンプトでhello world の文字が出ました。 VScodeのターミナルではcc1.exe: error: no iconv implementation, cannot convert from UTF-8 to CP932 このエラーが出たままなのですが、これはどういうことでしょうか。。
jbpb0

2021/05/02 10:04

VS Codeでのコンパイルは、具体的にどのようにやってますか? VS Codeには、C言語の開発用に、何か拡張機能を入れてますか?
ryouk

2021/05/02 10:09

C/C++とCode Runner、Japanese Language、Remote WSLをいれています。
jbpb0

2021/05/02 10:20

gcc -vの結果見たら、gcc version 4.4.7なんていう、かなり古いの入れてますよね https://gcc.gnu.org/gcc-4.4/ を見ると分かりますけど、10年近く前のバージョンです 何でそんな古いの使ってるのでしょうか? 参考にされたWebサイトの、「インストーラのセッティング画面が表示されます。」と書かれてるところの下の画像では、8.1.0を選んでますけど バージョンが古いことが、今回の質問のエラーの直接の原因かどうかは分かりませんが、何か理由があって古いバージョンを使ってるのでなければ、もっと新しいのを使う方がいいと思いますよ
ryouk

2021/05/02 10:53

新しいバージョンはどこでダウンロードできるのでしょうか。
ryouk

2021/05/02 10:54

現在のバージョンをアンインストールして新しいバージョンをインストールすればいいということでしょうか。
jbpb0

2021/05/02 10:56

古いのが要らないなら、アンインストールした方がいいでしょうね 意図せず不用意に使ってしまうと、トラブルの元ですから
ryouk

2021/05/02 10:59

ありがとうございます! 新しいバージョンというのはどこのサイトに載っているのでしょうか。 私が調べたところ古いバージョンしか見当たらないのですが。。
jbpb0

2021/05/02 11:02 編集

> 新しいバージョンはどこでダウンロードできるのでしょうか。 https://dianxnao.com/windows%e3%81%abc%e8%a8%80%e8%aa%9e%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83-mingw-w64%ef%bc%88gcc%e3%82%b3%e3%83%b3%e3%83%91%e3%82%a4%e3%83%a9%ef%bc%89%e3%82%92%e5%b0%8e%e5%85%a5%e3%81%99%e3%82%8b/ に書かれてる通りです インストーラーをダウンロードして実行したら、インストールするバージョンとbitを選ぶ画面がありますので、そこで下記を選びます バージョン:新しい(番号が大きい)やつ bit(Architecture):Windowsに合わせる 【追記】 「インストールするバージョンとbitを選ぶ画面」は、下記を見てください https://dianxnao.com/wp-content/uploads/2021/03/mingw64_install7.jpg
ryouk

2021/05/02 11:22

MinGWのrun terminalではバージョン8.1.0なのですが cmdではバージョン4.4.7になってしまいます これはpath設定が間違っているという事でしょうか。 https://dianxnao.com/windows%e3%81%abc%e8%a8%80%e8%aa%9e%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83-mingw-w64%ef%bc%88gcc%e3%82%b3%e3%83%b3%e3%83%91%e3%82%a4%e3%83%a9%ef%bc%89%e3%82%92%e5%b0%8e%e5%85%a5%e3%81%99%e3%82%8b/ これに書かれてる通りにpath設定を行っているのですが。。
jbpb0

2021/05/02 12:34 編集

> これに書かれてる通りにpath設定を行っているのですが。。 参考にしてるWebサイトに記載の設定方法だと、環境変数Pathの最後に追加するようになってるので、それよりも前にgccを含むものがあると、それが使われてしまいます where gcc を実行して、MinGWとは他のものが出てくるのなら、そのパスよりも前にMinGWのパスを設定する必要があります
ryouk

2021/05/02 12:27

できました!! ありがとうございます!
ryouk

2021/05/02 12:28

できました!! 何度も何度も本当にありがとうございました。
jbpb0

2021/05/05 09:00

Pathの順番を変えて8.1.0が使われるようになったら、日本語コメント有りでも大丈夫でしょうか? ソースコードファイルを保存する際の文字コードによって、大丈夫かどうか変わるかも
ryouk

2021/05/06 05:04

日本語コメントアリでも大丈夫でした。 何度もありがとうございました。
jbpb0

2021/05/16 07:36

それでしたら、Bullさんが回答で「PATH」の設定によって他のgccを使ってしまっている可能性に言及してるので、その回答をベストアンサーにしたらいかがでしょうか?
guest

回答3

0

gcc version 4.4.7 20111023 (prerelease) [svn/rev.180339 - mingw-w64/oz] (GCC)

バージョンが古いのがエラーの原因のような気がします。

オンライン インストーラーでインストールする場合、最新の8.1.0をインストールすればいいと思いますが、8.1.0をインストールしていないのでしょうか?
あるいはこちらから、オフライン インストーラーをダウンロードしてインストールすることもできます。

もし、8.1.0をインストールしているとすると、起動しているgccは別のバージョンということになります。
PATHを確認して、他のバージョンのgccが起動してないかどうか確認してみてください。
また、コマンドプロンプトあるいはVScodeのターミナルでwhere gccとやってみてください。

投稿2021/05/02 10:15

Bull

総合スコア986

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

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

ryouk

2021/05/02 11:30

where gccをとやるとC:\Dwimperl\c\bin\gcc.exeが出るのですが これはどういうことでしょうか。 pathの部分を見たのですがC:\Dwimperl\c\bin\gcc.exe このような表記は見当たりませんでした。
Bull

2021/05/02 11:45

おそらく環境変数の PATH に「C:\Dwimperl\c\bin」が含まれているのでしょう。 そちらの gcc を使わないのであれば、PATH から削除すればいいのですが、それによって何か影響があるかもしれません。 (Dwimperl がなんであるのか私にはわからないですが)
ryouk

2021/05/02 11:59

消したのですがwhere gccをとやるとC:\Dwimperl\c\bin\gcc.exeが出ます。。
ryouk

2021/05/02 12:05

Dwimperのファイルを削除したらDwimperは出なくなったのですが 次は'gcc' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出るようになりました。 path設定はしているのですが。。
ryouk

2021/05/02 12:28

できました! サイトを表示させて丁寧な説明ありがとうございました!
guest

0

#include <stdio.h>
int main(void)  ←voidっていれるっけ?
{
printf("hello world\n");
return 0;         ←return 0 って何か返り値いるっけ・・・?
}

これでどう?

#include <stdio.h>

int main()
{
printf("あああ");

     getchar();

}

投稿2021/05/01 14:12

matukazekun

総合スコア47

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

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

ryouk

2021/05/02 00:22

ありがとうございます。 上記試してみた結果同じエラーが発生しました。
退会済みユーザー

退会済みユーザー

2021/05/02 12:21

C言語であれば「void」は必要です、main関数の戻り値に関しても、 「return」もしくは「exit()」を書くことが一般的だと思います。
guest

0

エラーは「iconvが実装されていないので文字コードをUTF-8からCP932(シフトJIS)に変換できない」って言ってますね。
私はVScodeは使っていないのでわからないですけど、とりあえず、ソースコードからコメントの日本語を消してビルドを試してみては。
それでビルドが通ったら開発環境の見直しですね。

投稿2021/05/01 14:24

itagagaki

総合スコア8402

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

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

ryouk

2021/05/02 00:22

ビルドも通らなかった場合はどうすればいいでしょうか。。
itagagaki

2021/05/02 00:47

端的には「iconvの実装が無い」のがエラーであるので、解決策としては (a) iconvの実装が無いならインストールする (b) iconv要らずのビルド方法を模索する のどちらかかな?と思いました。 で、まずは(b)を試してもらったわけなんですが、ソースコードから日本語を消してもダメだったというわけですね。 (b)については、まだ、ソースコードファイルの文字コードを確認するのと、コンパイルオプションで何とかならないか、という可能性が残されていますけど、それは置いといて(a)を考えてみましょうか。 gccの環境はどうやって構築しましたか? バージョンはどれですか?
itagagaki

2021/05/02 01:26

私はMingw-w64を使っていないので、お使いの環境にiconvをどうインストールできるか、ちょっと調べたんですがよくわかりませんでした。 私ならこうすると思います。 1. Mingw-w64は一旦アンインストールする 2. MSYS2をインストールする 3. pacman -S mingw-w64-x86_64-toolchain でGCCツールチェインをインストールする 4. pacman -S mingw-w64-x86_64-iconv でiconvをインストールする 5. pacman -S mingw-w64-x86_64-libiconv でlibiconvをインストールする(これは要るかどうかわからないですけど) こちらが参考になると思います。 [MSYS2 による gcc 開発環境の構築] https://qiita.com/spiegel-im-spiegel/items/ba4e8d2418bdfe0c8049
Bull

2021/05/02 04:35

私は MinGW-W64 を使っていますが、とくに iconv をインストールしたことはないです。 ディストリビューションによっては libiconv*.dll を必要としますが、MinGW-W64 では特に必要無いようです。 エラーメッセージで検索すると、少し古い情報がヒットします。以前に gcc をインストールして、PATH に残っているということはないでしょうか?
ryouk

2021/05/02 07:06

昨日インストールしたばかりなのでPATHに残っていることはないと思います。
Bull

2021/05/02 08:07

私がインストールしたのはかなり前なので、最近のものは変わっている可能性がありますね。 gcc -v を実行すると長々と文字列が出てくると思います。 Configured with: の所で、"--with-libiconv" という記述があるかどうか、確認して頂けますか? それと、mingw32\i686-w64-mingw32\lib\libiconv.a のファイルサイズを見て頂けますか?
ryouk

2021/05/02 08:17

ファイルサイズはどこを見ればいいのかわからないので出た文をペーストします。Configured with: の所には"--with-libiconv" という記述はないと思います。 Using built-in specs. Target: i686-w64-mingw32 Configured with: ../gcc44-svn/configure --host=i686-w64-mingw32 --target=i686-w64-mingw32 --disable-multilib --enable-checking=release --prefix=/opt/mingw32 --enable-languages=c,c++,fortran --enable-libgomp --with-gmp=/opt/mingw32 --with-mpfr=/opt/mingw32 --disable-nls --disable-win32-registry Thread model: win32 gcc version 4.4.7 20111023 (prerelease) [svn/rev.180339 - mingw-w64/oz] (GCC)
Bull

2021/05/02 10:14

ここで続けるのはあまりよろしくないと思いますので、回答欄に書きます。
ryouk

2021/05/02 10:16

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問