プロが教える店舗&オフィスのセキュリティ対策術

C言語はなぜ簡単な関数すら実装されていないのでしょうか?

何かと便利でperlを昔から使っているのですが、今回Arduino制御のためC言語を少し勉強しています。
そこで疑問に思ったのですがC言語は長く使われているにもかかわらず、なぜ簡単な関数すら用意されていないのか不思議に思っています。
perlであれば仮に標準でなくても誰かが作成した簡単な関数なりモジュールなりが一般に出回ってます。

例えばですが下記のような物でもperlなら簡単ですがC言語ではまだ書ける段階ではありませんが、文字列の分解や置換だけでもかなり面倒な気がします。
または、私が気付かないだけで便利なモジュールや関数がありますか?


# 例1 splitで文字と数字にすぐ分けられる
my $word = "TOKYO-2019";
my ($str,$int) = split(/-/,$word)
print "$str ";#TOKYO
print $int + 1;#2020

# 例2 文字列を1行で置換できる
my $word =~ s/-2019/ 2020/;
print $word;#TOKYO 2020

A 回答 (12件中1~10件)

もともと、C言語は unix (linux の原型)を開発するために


作られた言語です。

OSの記述が目的なので、アセンブラに近い記述ができるように
設計されました。
    • good
    • 0

No.7です。

お礼文を読みました。

>split一つなら簡単でしょうが実際には簡単な操作は大量にありますし、
>それらを記述しているとタイプ数もかなりの物になりそうです。
>タイプする時間が無駄なのではないのかなぁーと思ったりもしますが、
>そういうことはないのでしょうか?

出来合いのものに合わせてプログラミングすることで処理を損することを嫌うのでしょう。少なくとも私はそうです。
出来合いの関数を使う場合は、それを使うための手続きが必要になりますが、内部データの持ち方がバッチリ合わないと、その関数の引数を作るための処理を作ったり、その関数の戻り値を処理するための処理を作る必要があり、結果的に処理全体に無駄が生じる(高速化したいからCで作るということならなおさらです)し、余分な処理を作る時間の無駄にもなると思います。
    • good
    • 0

ま、貴方の意図はなんなのかわからないけど、貴方中心に世界は回っていない、つまりは貴方の価値観でCの環境が変えたいのなら、貴方がそれを作ればいい。


もしかしたら貴方の思想に共感する人が現れてNextCができるかもしれない。

Cはその目的が達成されていて、もはや空気のようにあるんです。JavaもCによって書かれているし、PerlのパターンマッチングなんてUnixのコマンドレベルを模擬したものだし、、まぁ、、、いいか。
    • good
    • 0

>C言語はなぜ簡単な関数すら実装されていないのでしょうか?


 関数は言語に含めず、使うライブラリで実装する
というのがC言語の特長だからでしょうかね。

おかげで「C言語に関して覚えること」は少しだけで済みますよ。

たとえて言えば、
 使うかもしれないアプリがたくさんインストールされている国産PCと
 OSと、必要最小限のアプリしかインストールされていない某メーカーのPC
の違いのようなものでしょうかね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
確かに覚えることは少しで済みますね。ただ、効率的なアルゴリズムを覚える必要があり全体で見るとかなり難易度が高くなっている気がします。
PCに例えるとPCはただの箱でしたがPCの普及とともにVectorなどでフリーで使えるWindwosアプリが大量に作られそれを自由にダウンロードして使えるようになりました。Perlなどでもモジュール単位では同じような感じになっています。しかし、Cでは全て自分で作る必要があります。多くの人が使っているなら、どこかが取りまとめてみんなで利用という方向になら無かったわけで不思議に思っています。

お礼日時:2017/09/28 20:58

No6です。


SLI(Simple and Light Interface) ライブラリ for C user 
はC++ライブラリですね。失礼しました。無視してください。
    • good
    • 1
この回答へのお礼

再度コメントありがとうございます。

お礼日時:2017/09/26 12:28

>perlであれば仮に標準でなくても誰かが作成した簡単な関数なりモジュールなりが一般に出回ってます。



C言語向けのライブラリは探せばいくらかは見つかります。
文字列操作系だと、メールの解析などではgmimeとか、文字コード系などではlibiconvとかがよく使われていると思いますが、どれもこれもとても複雑な処理を行っていて、これを省力化するという目的で使われていると思います。私はCでプログラムを作る業務に携わって結構長いですが、C言語のライブラリが体系的に集められたものを知らないので、きっと探すにも苦労すると思います。目的をキーワードにすると見つかることがあるかもしれません。
perlのsplitみたいなものは、取り出した値をその後の処理にどう使うかがプログラムによってまちまちなので、処理自体簡単に書けてしまうこともありライブラリというよりは自前で作ってしまうのだと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
体系的には集められていないのですね・・・とても参考になりました。
また、具体的なライブラリの紹介ありがとうございます。
split一つなら簡単でしょうが実際には簡単な操作は大量にありますし、
それらを記述しているとタイプ数もかなりの物になりそうです。
タイプする時間が無駄なのではないのかなぁーと思ったりもしますが、
そういうことはないのでしょうか?

お礼日時:2017/09/28 19:24

こちらがあなたの求めているライブラリかもしれません。


SLI(Simple and Light Interface) ライブラリ for C users
http://www.ir.isas.jaxa.jp/~cyamauch/sli/index.n …
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2017/09/28 19:16

貴方は、いわゆる初心者とは言いませんが、プログラミングに関しては、いわゆるperlやpythonの人(Cの文化に馴染めない人は多数です)の為に色々と工夫した言語仕様なんです。

型を意識しなくてもいいとか安全に設計している。メモリー効率や速度的な面は考えてないのです。組み込みの装置の言語としてperlやpython使わないでしょ?

貴方がなぜに制御系である Arduino に迷い込んだかわからないのですが、Cはもう完結した言語です。これをどうこうしようなんてないわけですね。なぜって、だからperlやpythonが作られたのですから、、

個人のライブラリはそこら中にあるし、例で上げた様なのはCをする人ならそのまま書いちゃう(ほとんど同じように書けるし貴方が知らないだけなのです)

不便と感じるかはその人のスキルになんです。Cは制限を持たない(つまりは暴走するプログラムを作ることすら制限されない)のですから、人の考えたそのようなレベルのものは必要無いという事なんです。
    • good
    • 2
この回答へのお礼

確かに以前はそうでしょうが最近ではJavaなど広がっている気がします。Cももう少し気軽に使えても良いなと思ったりもしたわけです。Javascriptは詳しく知りませんがjQueryなどで完成した言語だったものが再度見直された気もしています。

また、私がArduinoを使いたいと思ったのは単純で、最近のIT技術の進歩によりROMライターすら不要になり本物のシリアル通信をする必要もなく、気軽にWindwos 7とArudinoがUSBでシリアル通信ができて簡単なプログラムで様々な身の回りにある機器が制御ができるためです。一例を挙げればルンバの壁も1個4000円しますが簡単なIR発信で同じ機能が複数台作れます。他にも植物を育てるための温度変化や湿度の記録と条件によっての水やり、CTで家庭内の電力量の把握など幅広く使えます。お値段もArduinoとIR-LEDで送料込み4ドル程度と安く買えるます。最近では小学生がArduinoを触ったりもする時代ですし、マイコン時代ならそうでしょうが、現在は単なる制御系という枠組みから脱皮しつつあるきもしています。

お礼日時:2017/09/28 19:16

C言語のコマンドは、電子回路におけるトランジスタやコンデンサ、


ダイオードの様なレベルの部品です。
それらを使いICやLSI等の部品を作り、電子回路を作るのに便利な
物にしたとしても、それらで対応できない場合には、新規にトラン
ジスタやコンデンサ、ダイオード等を使って回路設計をしなければ
いけません。
色々なライブラリを使って、高度なプログラムを作れるけれども、
新規のライブラリ群を一から構築し、全く別の物を作る事もできる
のがC言語です。
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
確かに小さな部品というのは分かります。
ただ、電子工作をしていると最近はモジュールやキットが驚くほどの廉価で存在しています。
それをパズルのように組み立てるだけで動いたりします。
勿論、一からそれを作ることもできますが、時代が進むと便利な物もできていますしC言語も古くから、驚くことに今も現役で使われています。
パフォーマンス追求は行いつつも、それと並行して簡単に使えるものができても良いのではないかと思うのです。
C言語の場合、例えば例に挙げたような操作ができたり、デファクトスタンダード化しているようなライブラリというものはありますか?

お礼日時:2017/09/26 12:28

なるほど。

ですがこれを不便と思う人か自分の扱いやすいようにする、、という文化なのです。

ところで例は別になんでも無いように思うのですが、どうしてもperlみたいに書きたいのなら、似たようなの作ったらいいのです。自身のライブラリに登録すれば、標準と同様に振る舞うのですから、、、
    • good
    • 0
この回答へのお礼

再度回答いただきありがとうございます。
Cの歴史は長く、この件について私がはじめて不便だと感じたとは思えないので、過去の蓄積の公開はないのでしょうか?
perlとpythonしか知りませんが、こちらは、不便だと感じる人がいれば、汎用性がある物については自身の専用ライブラリではなく公開のライブラリとして存在しています。

お礼日時:2017/09/25 17:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!