回答編集履歴
1
rewrite
answer
CHANGED
|
@@ -6,4 +6,54 @@
|
|
|
6
6
|
|
|
7
7
|
> パス 'C:\vscode\3ifelseFixedError.c' が存在しないため検出できません。
|
|
8
8
|
|
|
9
|
-
が全てですが、とりあえずあなたがやっていることは根本的に誤っています。
|
|
9
|
+
が全てですが、とりあえずあなたがやっていることは根本的に誤っています。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
眠くて反射神経的な回答をしてしまったので反省の意味を込めて自分なりに解説を。
|
|
14
|
+
|
|
15
|
+
## C言語のソースコードを実行するまで
|
|
16
|
+
|
|
17
|
+
普通C言語のソースコードを実行するとなると、
|
|
18
|
+
|
|
19
|
+
1. C言語のソースコードを書く
|
|
20
|
+
2. コンパイラでコンパイル
|
|
21
|
+
3. 出来上がった実行ファイル(バイナリ)を実行
|
|
22
|
+
|
|
23
|
+
という流れになります。インタープリターあるやろとかコンパイル時Cコンパイラは?とかstatic/shared libraryはどこいったという声も出そうですがとりあえずそういうのは後で。
|
|
24
|
+
|
|
25
|
+
## Windowsにおける実行ファイル
|
|
26
|
+
|
|
27
|
+
拡張子が`.exe`のファイルを一般的に実行ファイルとみなしますが、厳密にはPortable Executable(PE) formatに則ったbinary fileであることも必要です。まあ自分でコンパイラを作るのでもない限りそこまで気にすることはありませんが。
|
|
28
|
+
|
|
29
|
+
## Windows上で動くCコンパイラの例
|
|
30
|
+
|
|
31
|
+
- Visual Studio付属のcl.exe: どちらかというとC++コンパイラで、Cコンパイラとしては貧弱。C99という太古の昔のC言語規格にいまだきちんと対応していない
|
|
32
|
+
- gcc: GNU C Compiler、自由主義ソフトウェア、きちんとC11も扱えるが醜悪な独自拡張(VLAISとか)もある
|
|
33
|
+
- clang: GCCの開発速度が遅かった時代に業を煮やしたAppleが他の会社も巻き込んで作った。きちんとC11も扱える
|
|
34
|
+
- bcc32: Borlandが作ったコンパイラ。前世紀末は実行速度面で重宝した時期もあるようだが、もはや出番はない
|
|
35
|
+
|
|
36
|
+
名前だけ知っていればよい。
|
|
37
|
+
|
|
38
|
+
## Windows上で手っ取り早くgcc/clangを使うには
|
|
39
|
+
|
|
40
|
+
[msys2](https://www.msys2.org/)というプロジェクトがあって、これを利用すると常にほぼ最新のgcc/clangを始めとする様々なソフトウェアが利用できる。しかもArch Linuxと同じpacmanをパッケージマネージャに採用。何を言っているのか分からないだって?いいんだよとりあえずこれ使えば。気が向いたときに`pacman -Syuu`と打つだけでほぼ最新のgcc/clangを始めとする様々なソフトウェアが常に利用できる。
|
|
41
|
+
|
|
42
|
+
ググれば初期導入のやり方はいくらでも出るので割愛。
|
|
43
|
+
|
|
44
|
+
## gcc/clangでの初歩的なコンパイル方法
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
gcc -Wall -Wextra -pedantic -std=c11 -o a.exe a.c
|
|
48
|
+
clang -Wall -Wextra -pedantic -std=c11 -o a.exe a.c
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
いずれかのようにすれば良い。`-Wall -Wextra -pedantic`をつけておくと初心者がやらかしがちな多くのミスをコンパイラが叱ってくれる。~~ボーっと生きてんじゃねーよ!~~
|
|
52
|
+
|
|
53
|
+
`-o`のあとには生成ファイルの名前を指定する。デフォルトで`a.exe`だが普通別の名前にする。
|
|
54
|
+
|
|
55
|
+
そのさらにあとにコンパイルするソースファイルを列挙する。いや、`-o`より前でもいいこともあるんだが、稀にうまくいかなくなるので`-o`で先に出力を指定するほうがよい。
|
|
56
|
+
|
|
57
|
+
### コンパイルできたかの確認方法
|
|
58
|
+
|
|
59
|
+
そもそもコンパイルエラーが出なければコンパイルできていると言えるが、別の手段で確認したいというのであれば、単にコンパイルしたdirectoryをエクスプローラかなにかで開いて生成ファイルを探してあればできている。
|