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

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

ただいまの
回答率

90.51%

  • C

    3668questions

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

  • C++

    3439questions

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

  • プログラミング言語

    679questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C言語(C++)の使い道

受付中

回答 5

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,679

strike1217

score 554

C言語はどんなものを作りたい時に向いている言語なんでしょうか?

例えば、OSやコンパイラはC言語に頼る必要があります。
ですが、パッチやプラグインなどは普通C言語で作ったりするんでしょうか?

基本的にC言語で出来ないことはないと認識しているのですが、簡単なプログラムをちょちょいと作りたい時には面倒ですよね?

かなりマニアックな人が使用する言語なのかな??と思っています。

OSやコンパイラ、ゲーム(DirectX)以外に「こういうものを作りたい時は、C言語!!
逆に「こんなプログラムにはC言語は向いていない!」というものを教えてください。

実践の世界でC言語をどのように活用しているのかが知りたいです!!

「追記」
このようなものを見つけました。
C言語で作れるモノとその事例まとめ【ソフトウェア/ロボット/OS】

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 5

+4

できること、できないことをチューリング完全かどうかで判断するなら、現在広く使われているプログラミング言語はほぼ全てのことについて同じことが実現できると言ってよいでしょう。

他の言語の方が生産性がよいと感じられているとしても、例えばPHPのインタプリタはC言語で実装されていますし、CRubyやCPythonも同様です。
ですので他の言語を使用していたとしても、無縁というわけではないでしょう。

C言語で実装するうえでのの利点は移植性にあると考えます。
難点はメモリ管理を自分たちで行わなければならないことです。

C言語の難点を克服しようとする言語として、GoやRust等が開発されています。
これらにより、より安全に実行できるプログラムが作成されていくものと考えています。
その時にはC言語を使用しない環境も現れてくるものと思います。


追記:

少し追記します。
組込みシステム開発においてC/C++が使用されることが多いというのは、その通りだと思います。
C言語は比較的ハードウェア等を直接扱いやすいという点、前述した移植性の点から採用されることは多いです。
C++をbetter Cと考えるように、Cをbetter アセンブリ言語と考えることもできるのではないかと思います。
最近では、mrubyのように組込みシステム開発においてもC言語以外の選択肢が登場し始めているように思います。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/29 23:57

    「現在広く使われているプログラミング言語はほぼ全てのことについて同じことが実現できると言ってよいでしょう。 」
    ほぉ~~なるほど!
    そうなんですか!!

    キャンセル

  • 2017/10/30 00:02

    現在ではかなり多くの言語が開発されています。
    どのプログラミング言語をやれば良いのか困惑しますね!

    ほぼすべてについて同じことが実現できるとすると「C言語での実装が難しい」からという理由だけでこれだけの言語が生み出されているんですかね??

    キャンセル

  • 2017/10/30 00:14

    なんでもできる、ということが常に利点であるわけではありません。特定の機能に特化することで分かりやすさや生産性を上げるといったことも行われています。
    そのような言語はDSLなどと呼ばれます。

    キャンセル

  • 2017/10/30 00:17

    ああ~。
    なるほど!
    特化型ですね!

    キャンセル

+4

将棋ソフトの内部エンジンの多数はCです。
機械学習済みの評価関数にどれだけ値を突っ込むかの勝負ですからね。
ロジックがシンプルかつ、計算速度がモノを言うジャンルは文句なしCでしょう。

こういうものを作りたい時は、C言語!!

企業が低レイヤーのプロジェクトを作った場合(消極的な理由)

Rust、D言語、Go等の低レイヤを触れる言語が次々と伸びてきており、
ちょっとしたプロジェクトではかなりの分野を食われています。
更にチューニング済みのCを吐き出すNimが1系になればCを使わなければならない分野はほぼ全滅するでしょう。

しかし、なんだかんだでCを読める人は多いです。
対するNimはそもそも知ってる日本人3桁人数居ますかね?程度の知名度です。
既存の企業が低レイヤーで動く言語のプロジェクトを作って開発者を集めても、
CかGOかくらいでしか技術者を集められないでしょう。

こんなプログラムにはC言語は向いていない!

開発速度が重視される箇所全てです。
Cのポインターのやりくりや、メモリー領域のやりくりではユーザーが抱える問題は解決されません。
ユーザーが抱える問題やニーズを解決するのがプログラマという職業なので、直接作用するプログラムを宛がう言語の方が一手間少ないですね。

多くのスクリプト言語は、その場でコンパイルしてすぐ使えるので、ソースコードだけ用意すればすぐ実行して結果を確認できます。
PHPやRubyは高速にWebサーバを開発出来る言語として定着しましたし、
RやPythonは統計や機械学習に目をつけた人たちが集まってライブラリを開発しましたので、ちょっとやそっとの言語では覆せない程のアドバンテージになっています。

JavaなんかはOS間の移植性を考えて、JVMという中間コードを生成してそれをもってOS間の差分を埋めていますね。
現場では対応OS分だけ書くのを覚悟しろという本末転倒な嘆きが聞こえるそうですが…

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/30 13:14

    C/C++が最速というのはよく聞きますね。

    Cだけできれば良いのかな・・・という気がしています。
    イマイチ、他の言語を学ぶ理由が見当たらないんですよね~
    C言語は他の言語に比べてコード量が多くなるから面倒という理由だけで別の言語を勉強するのも面倒くさいんですよね~~

    次に勉強するものとして、今はpythonを考えていますね。

    キャンセル

+2

組み込み分野といった低レベルレイヤーのプログラムではC/C++がメインで使われていますよ。
リアルタイムOS向けの開発環境でそれ以外の言語がサポートされているのはあまり見たことがありません。
(自動車メーカーなどでは内製の秘伝の言語みたいなのがあるのかもしれませんが・・・。)

  • 使用可能なメモリなどリソース上の制約が大きい。
  • 様々なプロセッサやアーキテクチャが無数にあるのでC#やJavaなどの仮想マシンやランタイムをサポートしきれない。
  • リアルタイムOSが一般的に使われてない。

などの理由があると思います。
C/C++言語が使われる理由としては

  • I/O制御がポインタで簡単にでき、ハードウェアの制御に適している。
  • 余計なことをしないので使うリソースの量を読みやすい(バグがなければ)
  • 枯れた技術なのでみんなが知っている。

が、ぱっと思いつきました。

逆に、linuxやwindows上で動作するユーザーアプリケーションをC/C++で作るメリットは生産性の観点からみると、余りないと思います。
C/C++だと自分で実装しなければならかったのが、Pythonだとライブラリをimportするだけで使えたりしますからね。
学習が目的の場合だったらこの限りではありません。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/30 11:46

    やはり、C言語は低レイヤー向けなのですね!!
    高レイヤー向けにpythonを勉強し始めた方がよさそうですね!!

    キャンセル

  • 2017/10/30 11:48

    あ!C++はどうですか??
    あれは低レイヤーでも高レイヤーでも通用する言語なのではないでしょうか??

    キャンセル

  • 2017/10/30 23:00

    C++でもできなくは無いですが、それだけというのはおそらくデメリットのほうが大きいと思います。
    しなくてもよい苦労ばっかりでメンテナンスするのも嫌になる可能性大ですね。
    他の方も述べているとおり、採用する言語は適材適所で考えるべきだと思います。
    (個人的な考えですが、言語や開発環境の選定もソフトウェア設計における重要な作業だと考えています。)

    自分だったらまず、pythonやC#で作ってみてから、高速化が必要な部分だけC/C++で書き直すといった具合ですかね。

    キャンセル

+1

組み込みの世界ではC言語がまだ多く使われていると思います。
Cは昔、低レベル(良いとか悪いという意味ではなくよりハードウェア寄りという意味)高級言語と言われてました。(今も言うかな?)

組み込みというのは、携帯端末とかではなく、何かの機器の制御に特化したような基板です。例えば車載用のマイコンなどです。
以前は、割り込み処理などはC言語ではなくアセンブラも使用していましたが、最近はこれらもC言語で書くようになっています。(CPUが速くなったおかげもあります)

私はまだ使ってませんが、C++も組み込みの世界で使われるようになっている様です。(生産性はC++の方が高いですからね)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/30 17:15

    なるほど!OS開発もやがてはC++に乗っ取られそうですね。

    キャンセル

  • 2017/10/30 17:16

    C++でアプリケーションを開発したりしている人って少ないんですかね??

    キャンセル

  • 2017/10/30 17:46

    組み込みの場合、全くの新規でCPUの能力やメモリーも多く使える場合は、C++で作ってみるかなという気にならないことはないですが、組み込みの世界というのは前のバージョンとの互換性を重視するのと、開発期間の短縮のために、以前のコードを結構流用して作ります。なので、今までC言語で作っていたら、そのままの流れでC言語を使い続ける場合が多いと思います。
    C++だとどうしてもメモリーを多く使うのと、プログラムをFLASH(動画ではない)化することが多いので、PCの様に全てをRAM上で動かすという作りにはなりません。なので、動的にメモリを確保するという考えのもとに作られていることが少なく、そのあたりで苦労するのなら今までの流れを継承して作るということになるのだと思います。
    クラスを使ってオブジェクト指向でその恩恵に与りたい気もしますが、なかなか踏み出せないですね。

    キャンセル

  • 2017/10/30 17:48

    なるほど!C言語からC++に移行するのがやはり面倒というのは確かにありますね。

    キャンセル

0

C言語は良くも悪くもシンプルで余計なことをしない言語です。
逆に言えば、きちんとコンピュータの動作原理を理解していないと、危険なことであっても平然とやれてしまうのです。
※データ破壊どころかプログラムそのものを(自ら)破壊することだってできる

それを理解した上で、その隙間を突くような芸術的技巧もまたあるのですが(w

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/29 23:59

    C言語は奥が深いですね。

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • C

    3668questions

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

  • C++

    3439questions

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

  • プログラミング言語

    679questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。