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

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

ただいまの
回答率

90.32%

  • C

    3997questions

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

c言語の環境構築について教えてください

解決済

回答 6

投稿

  • 評価
  • クリップ 2
  • VIEW 670

siaron

score 2

全くの初心者ですので間違ったこと言ってると思いますがご了承ください
c言語を学ぼうと思うのですが
環境構築がわかり辛いです
visualstudioでデスクトップアプリケーションとか選んでprintfのビルドとかしてると失敗します
cのファイルにすればいいとかmainの前にc++だと型を入れなきゃいけないとかatomというエディターでgcc(MinGC)だとかでそっちは動きました
それはそれでいいのですが

@なんというか純粋にc言語を勉強したいのと
@WINAPIはc++ではなくc言語で使えるのか
聞きたいです

苦しんで覚えるc言語というのもあるらしいですが
起動したらエラーみたいなやつがでます
それにあれだとcだけのやつなのだと思うのでWINAPIは使えないのでしょうか?

何かいい環境はないでしょうか
普通にやってる方は設定とか普通にやると思うんですけど
ファイルの設定やらバッチやら毎回設定するのって凄い無駄な事してる気がするのですが

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kaizen_nagoya

    2018/05/18 07:11

    純粋なC言語はWINAPIとは無縁です。純粋なC言語は、コンパイラやOSを書くのに使われています。どちらを優先されるかおかきいただけると、回答をどちらに重点をおけばいいかがわかります。

    キャンセル

  • siaron

    2018/05/19 00:25

    純粋なc言語とはどんな感じでしょうか、聞くだけでもって言ったらおかしいですがどちらも知りたいです、欲張りなのもわかってますが一部しかしらないとそれはそれで勘違いすると思いますし、全体像が見たいです

    キャンセル

回答 6

checkベストアンサー

+3

なんというかいろんなものが混ざり合ってしまっている、実にカオスだ。

  • 「苦しんで覚えるC」はC言語の入門本。pure C。良書です(個人的な見解)
  • Visual StudioはC/C++コンパイラやテキストエディタをすべてセットにしたIDEである
  • Visual StudioのC/C++コンパイラであるcl.exeはC++コンパイラとしては最近かなりマシになっているが、CコンパイラとしてはC99にすらまともに対応していない。C言語の勉強には不向き。
  • gccはCコンパイラである
  • mingwとはlinuxなどで標準的に使われているツール群でWindows向けのbinaryを吐くことができる環境。Windows上はもちろんLinux上でも動く(LinuxでクロスコンパイルしてWindowsで実行とかが一般的なユースケース)
  • Win32APIとはWindowsのもつ機能を利用するためのAPI。もちろんCから利用できるし、Cから使えるということはたいていどんな言語でも(難易度の差こそあれ)使える。
  • いろんなコンパイラを同時に利用したい場合はCMakeを利用するといいです  
    ありきたりなCMakeのプロジェクト作成 for C++ - Qiita
  • mingw-gccを利用するときの環境構築は様々な方法が乱立していましたが、現在ではmsys2を利用するのが圧倒的に楽です。依存ライブラリなどのパッケージ管理はArch Linuxでおなじみpacmanが利用できます。
  • ぶっちゃけC言語勉強したいならWindows上でやろうとするより、Ubuntu(18.04LTSよりは16.04LTSのほうが今はまだ安定している感じ)とかManjaro Linux(Arch Linux系でmsys2と同じくpacman使える)とかを入れて使うほうがストレスフリーで快適。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/18 23:57

    コンパイラの違いやmsys2等がよくわかりません
    UbuntuはLinux系で動作が軽いというくらいしかしりません
    Linuxを使う縁がなかったのですがそれが良いという点は何でしょうか?

    キャンセル

  • 2018/05/19 18:44

    > CコンパイラとしてはC99にすらまともに対応していない。
    その違いでなにか問題ありますか? 単なるお勉強レベルだったら、問題無いと思っています。Windowsしか使った事が無い人にとっては、お手頃な選択肢の一つと思います。

    キャンセル

  • 2018/05/19 23:33

    >その違いでなにか問題ありますか?
    VLAは初心者本では良く見かけますが、MSVCは実装していません。C99とは別の問題として、MSVC独自拡張で苦しんでいる初心者は掃いて捨てるほど見ます。現実的な障壁です。

    キャンセル

  • 2018/05/19 23:35

    >良いという点
    開発環境を作るのが楽ということでしょうか。基本的にパッケージマネージャーがあり、さらにArch Linux系ではArch User Repositryという仕組みがあり、大抵のソフトウェアがごく僅かなコマンドで入手でき、バージョンアップもできます。

    キャンセル

  • 2018/05/20 01:09

    ありがとうございます
    ええと、多分、言語の方言と一緒でコンパイラもそういうものがあると言う事でしょうか?
    今おっしゃってた様MS(マイクロソフトのことかな?)が、独自拡張してるってことだけど、cとかってOS関係ないですよね、言語とOSで
    でも自分のOSで使いやすい言語をってことですよね、多分Swiftとか
    gccとかでコンパイルするだけみたいなシンプルでいいのですが
    そのc99すらまともにとか、コンパイラの違いで何が違うのかがよくわからなくなります
    VLAとはLinuxの何かでしょうか?

    キャンセル

  • 2018/05/20 10:42

    >VLAとはLinuxの何かでしょうか?

    失礼、つい省略してしまいました、Variable Length Array(可変長配列)というC99で追加された言語仕様です。

    >独自拡張してるってことだけど、cとかってOS関係ないですよね

    MSVCの場合、いくつかのC標準関数に対して利用することが安全ではないとして、呼び出すだけでコンパイルエラーになります。無理やり呼び出す方法もあるのですが、それってCの学習から外れていると思うなぁという話です。

    >gccとかでコンパイルするだけみたいなシンプルでいいのですが

    gccも独自拡張があり、極稀にえっとなることはあります。-std=c11とか指定しておけば独自拡張は無効ですが。

    キャンセル

  • 2018/05/21 02:52

    ありがとうございます
    当たり前ですがバージョンやら仕様変更みたいなのはいつでもあるんですね
    独自拡張無効はありがたいです!
    こう言うのって破片はそこらで書かれてますが歴史というかまとめてあるような所ってないんでしょうか、大体はわかってる人向けなので細かくは書かれてないでしょうし、わかってる人に教えを乞うのが一番早い気はしますが、しつこくなってしまうので汗

    キャンセル

+2

mainの前にc++だと型を入れなきゃいけない

エラー文の通り、厳密に規格化されたC++では関数の戻り値の型の省略はできません。
実験したところMSVC/gcc/clangのうち通るのはgccのみでした。
gccでも-pedantic-errorsオプションを指定する事によりエラーになります。

VCの場合、拡張子で判別するのでC言語を学習したい場合ファイル名を変更するのがよいでしょう。


WinAPIについて
WinAPI自体はCから呼び出す事を想定しています。
実際に呼び出せるかはコンパイラ次第ですがx86/x64のexeファイルを生成できるコンパイラならほぼ呼び出せます。


苦C環境について
起動時のエラーもですが
苦CIDEで利用しているTinyCCは古く日本語対応ができていません。
VScodeにTCC拡張入れた方がマシでしょう
WinAPIについては使えそうな雰囲気を感じますね。


ファイルの設定やらバッチやら毎回設定する

何を指しているかは分かりかねますが
教育者側から「MSVCはC/C++を教えているのか、VCの使い方を教えているのかわからん」との声を聞いた事があります。

個人的におすすめの学習環境は前述のVScode + TCCですね。
不満が出るほど学習が進んだならば、VScode + MSYS2ターミナル設定になります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/19 00:20

    VCの場合、拡張子で判別するのでC言語を学習したい場合ファイル名を変更するのがよいでしょう。
    とのことですが、visual studioでのことでしょうかgccでのことでしょうか
    Cの話題でC/C++とVCが出てきたことの意味を理解していません
    x86/x64とか時代というか歴代のというか規格とかなんだろうと思いますが、よほど古い奴じゃなきゃ問題ないという意味でしょうか、正直色々あり過ぎてよくわかっていません
    visualstudioやgccやらはなんとなく理解しましたがさらに細かく色々コンパイラが存在してるってことですよね
    なんでも聞いてすいませんが多岐にわたり過ぎるのとネットに無駄に情報が多すぎるので教えてください

    キャンセル

  • 2018/05/19 02:14

    度々すいません、入れたのですが、TCCやらターミナルやらの設定はどうやればいいのでしょうか、拡張で入れるだけでよいのですか?

    キャンセル

  • 2018/05/19 07:31 編集

    > visual studioでのことでしょうかgccでのことでしょうか
    MSVC、つまりはVisual Studioのコンパイラの事を指していました。

    > よほど古い奴じゃなきゃ
    そう捉えてもらってもいいです。64bit Windowsでは動かない珍品が世の中にはあるという事です。

    > TCC
    メニューの 表示 > 拡張機能 > TCCで検索し2つ出てくるのでどちらかをインストール
    どちらでも大差ないがcompile/runの方がデフォルトでF10ワンボタンなので楽っちゃ楽
    (が、個人的にはリポジトリが公開されてないのがマイナス)
    あとは、Cのソースファイルを開くなり書くなりして、保存したらctrl+shift+pからTCC: Runと打ち込むだけ

    msys2ターミナル設定についてはTCC拡張と競合したりして現時点で入れると面倒くさいので
    TCCで不満を感じたあたりで検討してください。

    キャンセル

  • 2018/05/20 00:31

    ありがとうございます
    即試して直しての繰り返しすぐ出来る方がいいので助かります
    そうですね、それが一番とっつきにくい理由かもしれないです
    色々探してるとバージョン違いが多かったり
    同じ環境やらで出来るようにしたらいいのに
    変えるのは内部だけでお願いしますと思ってしまいます

    キャンセル

+1

@なんというか純粋にc言語を勉強したいのと
@WINAPIはc++ではなくc言語で使えるのか

この2つは相反することです。
WINAPIは名前の通りWindowsのAPIなので、純粋なC言語とは異なります。
初心者とのことなので、まずWINAPIのことは忘れて、C言語の基本的なことから学習されてはいかがですか。
どっちみちC言語の基本的なことがわかっていないとWINAPIなんて使えないと思いますし。
なのでMinGWの環境で、適当なエディタでコードを書く→コマンドプロンプトからgccでコンパイル→実行ファイルを実行して確認、のようないわゆる普通のC言語開発で学習することをお勧めします。
最初からVisualStudioのような大きな開発環境で始めると、C言語以外のところで足を引っ張られる可能性がありますので。
ある程度C言語の基礎を身に着けることができたら、VisualStudioなりWINAPIなりにステップアップすればよいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/18 23:44

    自分が勘違いしているのはわかるのですが
    例えば猫でもわかるc言語とかあれは純粋なc言語ではないのでしょうか
    違うと言われれば違うとわかりますが
    ただわかってる皆さんからの当たり前が初心者には当たり前ではなく言ってる意味がわかりません
    何が純粋なc言語なのでしょうか

    キャンセル

  • 2018/05/19 17:54

    C標準規格で規定されている範囲ですね。

    キャンセル

  • 2018/05/19 18:39

    Visual Studioでも簡単に使えます。
    コマンドラインから、
    > cl *.c [Enter]
    と打ち込めば、コンパイルでき、普通に使えます。それって、gcc と同じじゃないでしょうか?
    エラーメッセージとかが分かりにくいのは、どっちもどっち。

    キャンセル

  • 2018/05/21 08:48

    >siaronさん
    yumetodoさんが書いているようにC標準規格の範囲です。
    要は基本的な文法であったり作法であったり、また標準ライブラリが使えるところあたりまでになります。
    WIN32APIはWindowsを操作するための道具のようなものですから、C言語("言語"を強調)を学ぶという本質からは外れてしまいます。
    何かに例えてみましょう。例えば料理とか。
    料理についてまずは基本的なことを学びます。
    包丁の使い方だったり切り方だったり、調味料の種類ですとか、まあ基本的なことです。
    これがC標準規格にあたります。
    ある特殊な食材があったとします。
    基本的な道具や知識で調理できないこともないですが、ものすごく大変です。
    その食材を調理するための便利な道具ができました。
    これを使えばちょっとの手間で簡単に調理できるようになります。
    これがWIN32APIになります。

    >pepperleafさん
    コマンドラインから実行できることは知っている人は知っているでしょうけど、初心者にはわからないことでは。
    またこれを機会に知ったとしてもGUIの開発環境との関連は?とかわけがわからなくなりそうですよね。
    なので純粋なgccを紹介しました。

    キャンセル

  • 2018/05/21 21:28

    > ttyp03さん、
    > コマンドラインから実行できることは知っている人は知っているでしょう
    確かにそうです。同様に、gccをどれだけの人が使えるでしょうか、大差ないと思います。エディタ動かして、コンパイラを呼び出し、実行する。 この一連の流れと、統合環境の理解(操作)のどちらが大変か、と言うレベルかと。

    キャンセル

  • 2018/05/21 23:32

    道具のようなものなんですね
    gccか総合環境かとは悩みますが個人的に余計なものがないしやり方が書いてあった所があったので
    やり方も色々とあると言う事ですね
    お二方共ありがとうございます

    キャンセル

  • 2018/05/22 08:36

    >pepperleafさん
    まあやり方は色々出たので、あとは質問者さんがピンと来たのを選べばいいだけでしょう。
    別に絶対にgccでやるべき、と言っているわけではないですし。
    両方やってみてやりやすい方を選んでもいいですしね。

    キャンセル

0

幾つかコメントしましたが、、、
結局は何のために Cを学びたいかという事になるのでは思います。

純粋なC言語っていったいなんでしょう。
今時、K&R と言っても骨董品と言われるでしょうが、元々はここからとも言われます。また、お仕事で使われる場合を考えると、指定された言語/環境があって、標準云々よりもそちらが優先。(バグで使っちゃいけない機能もあったり)

それと、Linuxについて、これから勉強したいという事があれば、別ですが、Windows + Visual Studio あたりでも十分と思います。(無償版もあるし)
ただ、その次を考えると難しい。
純粋な C と言った時に何ができるか? お絵かきなんてのは、外部ライブラリで、環境依存だったかと。(WINAPIは、Windows環境でのお絵かき用) Cのみでは、文字(数字)の入出力だけでしょうか? 将来を考えると、統合環境になれる事も必要かと思いますが、慣れるまで大変。
お手軽どころでは、Windowsのコマンドプロンプトから、CL コマンドでコンパイルし、実行するのが、簡単と思ったが、コマンドプロンプトの理解が必要。
また、WINAPIは、今、覚える事に価値があるのか、疑問もあります。(手間がかかる割には、使うところが無い)

と考えると、C言語が良い選択なのか疑問がありますが、どうでしようか?
Windows環境ならば、C#あたりが現実な選択肢ではないかと思います。WINAPIも現実的な選択肢とは思えません。あるいは、人気上昇中の Python ? 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/20 00:52

    ありがとうございます
    検索して知ったくらいの知識ですが機械語に近いことと速度が速いというようなこと、cは色々あるが他は方言と最近知って派生ってこと?と考えて、なら大本のcで良くない?と独自解釈しました汗
    WINAPIなのは、ウィンドウアプリを作りたいからです
    c#は他と比べ何が違うとかお絵かきやら文字だけじゃないというのは、どういう意味なのか教えてほしいです
    最初はゲーム作りたくて、でも覚えるのにじゃあツール作ろう、エディタで支援とかひな形用意しようとかあれこれ考えてる間に
    質問しててやりやすい環境、hsp的なすぐビルドやらして試行錯誤できるような環境作りたいなとは思ってます
    ただボタン押したらコマンドプロントに送って実行して、そう簡単にいかないんでしょうか

    キャンセル

  • 2018/05/20 10:47

    >ウィンドウアプリを作りたいからです
    素直にC#使いましょう。C/C++でやるもんじゃない。制作に必要な労力が10倍以上違う。

    >ただボタン押したらコマンドプロントに送って実行して、そう簡単にいかないんでしょうか

    これはJavaScript界隈でとくにそうなのですが、簡単さはあっという間に崩壊するものなのです。なぜならば我々の要求は簡単ではないので。

    キャンセル

  • 2018/05/20 11:09

    仕事で、C → C++ → C# と(他にもありますが)使ってきました。 Windowsと限定すると C#が使い易いです。 まあ、WindowsもC#も MSさんが作っているので相性が良いという事もあるかと思います。C#は、WindowsでのC言語系の最新版と思っています。(Pythonとかだと、ちょっと違う。他にも色々ありますが)
    そして、C+WINAPIと言うのは現実的ではないと考えます。参考書は「古い」のが沢山あるでしょうが、最新のWindowsに対応していると思えません。困った時に質問しても答えられる人も少ないと思います。また、C言語はアセンブラに近いと言われ、自分も Cならば、対応するアセンブラがほぼ、推測できます。その一方、メモリ破壊とか、意味不明のバグで出やすい言語であり、C++が生まれ、Java/C# となったと記憶しています。細かな操作はできないが、便利で安全な言語。また、Cでコードを書いた方が一般には高速ですが、昨今のCPUでは、C# 100万回のループも一瞬でした。そういう意味では、特殊な計算を除き、Cとするメリットは少ないです。
    > ただボタン押したらコマンドプロントに送って実行
    Visual Studio等の統合環境かと思います。多機能なので、最初が大変ですが、使っている人も多いので、参考情報も多いと思います。(バージョンによって機能が違う... 困ったもの) Windowsアプリならば、WPFアプリか、Windowsフォームアプリの選択が順当なところではないでしょうか。(この辺は人によって異なる)

    キャンセル

-1

Win32APIはC言語で使えます
ってか、Cで使うのを前提にデザインされてます

ファイルの設定やらバッチやら毎回設定するのって凄い無駄な事してる気がするのですが

そういうのは一度やってしまったら使い回しができるんで、毎回する必要はないですねー

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-2

純粋なC言語は、OS、コンパイラ、OS上のコマンドなどを設計するために用います。
環境設定はVisual Studio用の設定ファイルか、サンプルを変更して使っています。

環境設定とか、純粋なC言語とか、言葉に振り回されていませんか?

具体的に何がやりたいかをお書きいただくか、それに類似したサンプルがどこにあるかを探してから
質問いただくといいかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • C

    3997questions

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