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

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

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

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

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

C++

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

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

Q&A

解決済

4回答

2384閲覧

なぜ実行ファイルが得られるのか理由がわかりません。

carnage0216

総合スコア194

C

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

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

C++

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

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

0グッド

1クリップ

投稿2018/03/26 08:12

編集2018/03/26 08:13

<環境>
Windows10 64bit
MinGW
GCC

mingwにパスを通せたのですが、そのあと好奇心でCドライブのディレクトリに「自作MinGW」というファイルを作ってユーザー環境変数の新規変数に「自作MinGW」、値「C:\自作MinGW」を書き入れ
システム環境変数のPATHに「C:\自作MinGW」を書いた後、
コマンドプロンプトの方でコマンド cd C:\自作MinGW から
載せましたソースコード

/* header files */ #include <stdio.h> #include <stdlib.h> #include <math.h> /* main */ int main(void) { double x = 2.0, y; int n = 4; y = scalbn(x, n); printf("scalbn(%.2f, %d) = %.2f\n", x, n, y); return EXIT_SUCCESS; }

をコンパイルしたところ実行ファイルが得られました。
正直なところなぜ実行ファイルが得られたのかわかりません。
C:\自作MinGWのディレクトリにはヘッダファイルもなにも入っていません。あるのはソースコードだけです。
なぜ、ユーザー環境変数の新規変数に「自作MinGW」、値「C:\自作MinGW」を書き入れ
システム環境変数のPATHに「C:\自作MinGW」を書いただけでコマンドプロンプトで
C:\自作MinGW>へディレクトリを移りコマンド gcc C:\自作MinGW\std.cppから実行ファイルが得られるのか理由がわかりません。
前にも書きましたがC:\自作MinGWのディレクトリにはソースコードのみでヘッダファイルもなにも入っていないのに、ヘッダファイルが見つからないなどのエラーが出力されず実行ファイルが得られた理由がわかりません。

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

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

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

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

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

guest

回答4

0

ベストアンサー

疑問が複数あるようなので、ひとつずつ分解しましょう。

  1. ユーザー環境変数の新規変数に「自作MinGW」、値「C:\自作MinGW」を書き入れ

こちらについては、全くの無意味です。gcc、ならびに自作exeの動作に何らの影響も与えていません。
0. システム環境変数のPATHに「C:\自作MinGW」を書いた
これを行うことで、自作exeをパス指定なしで実行できるようになります。
0. ソースコード(中略)をコンパイルしたところ実行ファイルが得られました。
ソースコード内で、システムのヘッダのみ参照しているため、ヘッダパスなどを明示しなくてもヘッダファイルを見つけ、インクルードに成功しています。
0. C:\自作MinGWのディレクトリにはソースコードのみでヘッダファイルもなにも入っていないのに、ヘッダファイルが見つからないなどのエラーが出力されず実行ファイルが得られた理由がわかりません。
ヘッダファイルは、コンパイル時(つまりexe作成時)のみ必要となるものなので、exe実行時は必要ありません。

ほか、答えたりないところはありますでしょうか。

投稿2018/03/26 08:26

kazto

総合スコア7196

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

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

carnage0216

2018/03/26 08:40

整理してくださりありがとうございます。 2に関してなのですが、システム環境変数のPATHに「C:\自作MinGW」を書いただけでヘッダファイルを参照してくれているとのことですが、自作MinGWのディレクトリにあるソースコードが参照しているヘッダファイルはMinGWのディレクトリにあるヘッダファイルでしょうか? そのヘッダファイルを参照したため、自作MinGWに移ってもソースコードがコンパイルできたのですかね。 だとしても、自作MinGWとMinGWが環境変数でパスを通してだけで、自作MinGWがMinGWのヘッダファイルが参照できる原理がよくわかりません。
kazto

2018/03/26 08:45

誤解があります。「システム環境変数のPATHに「C:\自作MinGW」を書いただけでヘッダファイルを参照してくれている」とは、私は一言も言っていません。理由は4番に記載した内容そのものです。 > 自作MinGWのディレクトリにあるソースコードが参照しているヘッダファイルはMinGWのディレクトリにあるヘッダファイルでしょうか? その通りです。 > 自作MinGWがMinGWのヘッダファイルが参照できる原理がよくわかりません。 これは、GCCがデフォルトで参照するヘッダファイルパスを持っているからです。 ユーザがいちいちstdio.hがどこにあるかを気にしてコンパイルしなくてすむような便利機能とでもお考えください。
carnage0216

2018/03/26 09:33

うまく理解できてなくてごめんなさい。 なるほど4のおかげでmingwにあるヘッダファイルが使えるわけでしたか。 確かに便利です。
carnage0216

2018/03/26 09:37

どうもありがとうございます。
guest

0

mingwにパスを通せたのですが

これ。
mingwにパスが通っているから。

投稿2018/03/26 08:17

ttyp03

総合スコア16998

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

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

carnage0216

2018/03/26 08:20 編集

解答ありがとうございます。 mingwのパスが通ったとはいえ ユーザー環境変数の新規変数に「自作MinGW」、値「C:\自作MinGW」を書き入れ システム環境変数のPATHに「C:\自作MinGW」にどのように影響してディレクトリ自作MinGWに移ってもGCCが実行できるのかわかりません。
ttyp03

2018/03/26 08:30

明確な文書を探そうと思ったのですが、見つからなかったので推測で。 <>で括るシステムヘッダーファイルは、おそらくgccがあるフォルダを基点に、自動的に探しに行くものと思われます。 下記リンク先にあるように-vオプションをつけてコンパイルすると、どのような環境で動いているのかわかるとのことです。 https://oshiete.goo.ne.jp/qa/4149026.html
carnage0216

2018/03/26 08:40

どうもありがとうございます。
carnage0216

2018/03/26 09:34

asmさん、どうもありがとうございます。
guest

0

GCCはヘッダファイルの場所を知ってます。それだけ。
オプションで追加のヘッダファイルディレクトリを指定することもできますが、gccはgccをインストールしたときに(インストーラが)設定した「デフォルトの、ヘッダファイルを置いてあるディレクトリ」も見に行きます。

なお、PATHはgcc.exeを探すのに使う環境変数であってヘッダファイルとは無関係、というのは他の方が解説済みですね。

投稿2018/03/27 01:19

a_saitoh

総合スコア702

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

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

0

環境変数はPATHだけではありません。あなたの興味はPATHにしかないかも知れませんが、だからといってPATH以外を無視して勝手にPATHだけの話のつもりになっていいものでもないでしょう。

で、そもそもPATHってなんでしたっけ。
コマンド名を与えられたシェルが、PATHに書いてあるディレクトリ群をコマンド名探索の候補とするもの。それ以上でも以下でもないです。「ソース」も「ヘッダ」も関係ありません。

PATHに書いてある順にディレクトリを探索し、与えられたコマンド名で実行可能なものがないか順次探していって、最初に見つかったものを実行します。自作なんちゃらにgccがなかったですか。ではPATHに書いてある次のディレクトリを探しましょう。途中で他のディレクトリを探して見つからなかった、としても次を探します。たどり着いたC:\MinGW\binにgcc.exeがありましたか。ではそれを実行します。PATHの役割はここまで。gcc.exeは、実行ファイルの位置を基準に標準のヘッダやライブラリを探索してよろしくコンパイルを実行します。ここにはPATHは絡みません。

以上、この仕組みになにか疑問な点がありますか?

勝手に違う事柄を関連付けないこと。規則・事実だけを、認識して下さい。

投稿2018/03/26 14:16

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問