回答編集履歴

1

rewrite

2019/02/15 03:59

投稿

yumetodo
yumetodo

スコア5850

test CHANGED
@@ -15,3 +15,103 @@
15
15
 
16
16
 
17
17
  が全てですが、とりあえずあなたがやっていることは根本的に誤っています。
18
+
19
+
20
+
21
+ ---
22
+
23
+
24
+
25
+ 眠くて反射神経的な回答をしてしまったので反省の意味を込めて自分なりに解説を。
26
+
27
+
28
+
29
+ ## C言語のソースコードを実行するまで
30
+
31
+
32
+
33
+ 普通C言語のソースコードを実行するとなると、
34
+
35
+
36
+
37
+ 1. C言語のソースコードを書く
38
+
39
+ 2. コンパイラでコンパイル
40
+
41
+ 3. 出来上がった実行ファイル(バイナリ)を実行
42
+
43
+
44
+
45
+ という流れになります。インタープリターあるやろとかコンパイル時Cコンパイラは?とかstatic/shared libraryはどこいったという声も出そうですがとりあえずそういうのは後で。
46
+
47
+
48
+
49
+ ## Windowsにおける実行ファイル
50
+
51
+
52
+
53
+ 拡張子が`.exe`のファイルを一般的に実行ファイルとみなしますが、厳密にはPortable Executable(PE) formatに則ったbinary fileであることも必要です。まあ自分でコンパイラを作るのでもない限りそこまで気にすることはありませんが。
54
+
55
+
56
+
57
+ ## Windows上で動くCコンパイラの例
58
+
59
+
60
+
61
+ - Visual Studio付属のcl.exe: どちらかというとC++コンパイラで、Cコンパイラとしては貧弱。C99という太古の昔のC言語規格にいまだきちんと対応していない
62
+
63
+ - gcc: GNU C Compiler、自由主義ソフトウェア、きちんとC11も扱えるが醜悪な独自拡張(VLAISとか)もある
64
+
65
+ - clang: GCCの開発速度が遅かった時代に業を煮やしたAppleが他の会社も巻き込んで作った。きちんとC11も扱える
66
+
67
+ - bcc32: Borlandが作ったコンパイラ。前世紀末は実行速度面で重宝した時期もあるようだが、もはや出番はない
68
+
69
+
70
+
71
+ 名前だけ知っていればよい。
72
+
73
+
74
+
75
+ ## Windows上で手っ取り早くgcc/clangを使うには
76
+
77
+
78
+
79
+ [msys2](https://www.msys2.org/)というプロジェクトがあって、これを利用すると常にほぼ最新のgcc/clangを始めとする様々なソフトウェアが利用できる。しかもArch Linuxと同じpacmanをパッケージマネージャに採用。何を言っているのか分からないだって?いいんだよとりあえずこれ使えば。気が向いたときに`pacman -Syuu`と打つだけでほぼ最新のgcc/clangを始めとする様々なソフトウェアが常に利用できる。
80
+
81
+
82
+
83
+ ググれば初期導入のやり方はいくらでも出るので割愛。
84
+
85
+
86
+
87
+ ## gcc/clangでの初歩的なコンパイル方法
88
+
89
+
90
+
91
+ ```
92
+
93
+ gcc -Wall -Wextra -pedantic -std=c11 -o a.exe a.c
94
+
95
+ clang -Wall -Wextra -pedantic -std=c11 -o a.exe a.c
96
+
97
+ ```
98
+
99
+
100
+
101
+ いずれかのようにすれば良い。`-Wall -Wextra -pedantic`をつけておくと初心者がやらかしがちな多くのミスをコンパイラが叱ってくれる。~~ボーっと生きてんじゃねーよ!~~
102
+
103
+
104
+
105
+ `-o`のあとには生成ファイルの名前を指定する。デフォルトで`a.exe`だが普通別の名前にする。
106
+
107
+
108
+
109
+ そのさらにあとにコンパイルするソースファイルを列挙する。いや、`-o`より前でもいいこともあるんだが、稀にうまくいかなくなるので`-o`で先に出力を指定するほうがよい。
110
+
111
+
112
+
113
+ ### コンパイルできたかの確認方法
114
+
115
+
116
+
117
+ そもそもコンパイルエラーが出なければコンパイルできていると言えるが、別の手段で確認したいというのであれば、単にコンパイルしたdirectoryをエクスプローラかなにかで開いて生成ファイルを探してあればできている。