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

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

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

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

Q&A

解決済

6回答

2604閲覧

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

siaron

総合スコア8

C

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

1グッド

2クリップ

投稿2018/05/17 16:38

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

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

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

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

set0gut1👍を押しています

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

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

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

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

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

kaizen_nagoya

2018/05/17 22:11

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

2018/05/18 15:25

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

回答6

0

ベストアンサー

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

  • 「苦しんで覚える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 00:11

yumetodo

総合スコア5850

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

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

siaron

2018/05/18 14:57

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

2018/05/19 09:44

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

2018/05/19 14:33

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

2018/05/19 14:35

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

2018/05/19 16:09

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

2018/05/20 01:42

>VLAとはLinuxの何かでしょうか? 失礼、つい省略してしまいました、Variable Length Array(可変長配列)というC99で追加された言語仕様です。 >独自拡張してるってことだけど、cとかってOS関係ないですよね MSVCの場合、いくつかのC標準関数に対して利用することが安全ではないとして、呼び出すだけでコンパイルエラーになります。無理やり呼び出す方法もあるのですが、それってCの学習から外れていると思うなぁという話です。 >gccとかでコンパイルするだけみたいなシンプルでいいのですが gccも独自拡張があり、極稀にえっとなることはあります。-std=c11とか指定しておけば独自拡張は無効ですが。
siaron

2018/05/20 17:52

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

0

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/18 00:16

編集2018/05/18 00:17
asm

総合スコア15147

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

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

siaron

2018/05/18 15:20

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

2018/05/18 17:14

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

2018/05/18 22:33 編集

> visual studioでのことでしょうかgccでのことでしょうか MSVC、つまりはVisual Studioのコンパイラの事を指していました。 > よほど古い奴じゃなきゃ そう捉えてもらってもいいです。64bit Windowsでは動かない珍品が世の中にはあるという事です。 > TCC メニューの 表示 > 拡張機能 > TCCで検索し2つ出てくるのでどちらかをインストール どちらでも大差ないがcompile/runの方がデフォルトでF10ワンボタンなので楽っちゃ楽 (が、個人的にはリポジトリが公開されてないのがマイナス) あとは、Cのソースファイルを開くなり書くなりして、保存したらctrl+shift+pからTCC: Runと打ち込むだけ msys2ターミナル設定についてはTCC拡張と競合したりして現時点で入れると面倒くさいので TCCで不満を感じたあたりで検討してください。
siaron

2018/05/19 15:31

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

0

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

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

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

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

投稿2018/05/19 10:13

pepperleaf

総合スコア6383

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

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

siaron

2018/05/19 15:52

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

2018/05/20 01:47

>ウィンドウアプリを作りたいからです 素直にC#使いましょう。C/C++でやるもんじゃない。制作に必要な労力が10倍以上違う。 >ただボタン押したらコマンドプロントに送って実行して、そう簡単にいかないんでしょうか これはJavaScript界隈でとくにそうなのですが、簡単さはあっという間に崩壊するものなのです。なぜならば我々の要求は簡単ではないので。
pepperleaf

2018/05/20 02: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フォームアプリの選択が順当なところではないでしょうか。(この辺は人によって異なる)
guest

0

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

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

投稿2018/05/18 00:07

ttyp03

総合スコア16998

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

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

siaron

2018/05/18 14:44

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

2018/05/19 08:54

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

2018/05/19 09:39

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

2018/05/20 23:48

>siaronさん yumetodoさんが書いているようにC標準規格の範囲です。 要は基本的な文法であったり作法であったり、また標準ライブラリが使えるところあたりまでになります。 WIN32APIはWindowsを操作するための道具のようなものですから、C言語("言語"を強調)を学ぶという本質からは外れてしまいます。 何かに例えてみましょう。例えば料理とか。 料理についてまずは基本的なことを学びます。 包丁の使い方だったり切り方だったり、調味料の種類ですとか、まあ基本的なことです。 これがC標準規格にあたります。 ある特殊な食材があったとします。 基本的な道具や知識で調理できないこともないですが、ものすごく大変です。 その食材を調理するための便利な道具ができました。 これを使えばちょっとの手間で簡単に調理できるようになります。 これがWIN32APIになります。 >pepperleafさん コマンドラインから実行できることは知っている人は知っているでしょうけど、初心者にはわからないことでは。 またこれを機会に知ったとしてもGUIの開発環境との関連は?とかわけがわからなくなりそうですよね。 なので純粋なgccを紹介しました。
pepperleaf

2018/05/21 12:28

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

2018/05/21 14:32

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

2018/05/21 23:36

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

0

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

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

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

投稿2018/05/17 21:57

y_waiwai

総合スコア87774

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

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

0

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

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

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

投稿2018/05/17 22:15

kaizen_nagoya

総合スコア27

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問