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

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

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

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

Q&A

解決済

2回答

1108閲覧

他のc系の言語で実行でき、cでは作成できない処理の種類を知りたい

3_April_2021

総合スコア48

C

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

0グッド

0クリップ

投稿2021/11/07 01:13

前提・実現したいこと

他のc系の言語(またはcと同等な開発ができるメジャー言語)では可能でも、cでは仕様のために作成できない処理があるかどうかを知りたいです。あるとしたらどういうものなのか知りたいです。簡単な説明は嬉しいですが、ワードだけでも十分です。

発生している問題・エラーメッセージ

c学習か適切な言語選択のための調査のどちらをより優先するかを決定しようとしています。質問の答えに対応する情報はこの問題を効率的に解決する可能性がありますので知りたいですが、自己解決を目指す場合、この問題は後者の調査も経て解決するために、この問題解決のためにはこの行動を選択できません。

該当のソースコード

試したこと

リンクの内容は、引用の可能性のある情報程度に捉えてください。あまりにも多くの例を挙げたり、現在読み取っていることを質問に書いたりすると、最終目的や最終目的を過度に考慮した回答につながると思ったので控えました。

補足情報(FW/ツールのバージョンなど)

適切な言語を選択するための助言を直接的に求めている質問ではありません。

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

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

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

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

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

meg_

2021/11/07 01:26

> c学習か適切な言語選択のための調査のどちらをより優先するかを決定しようとしています。 何のためにプログラミング言語を学ぼうとしているのでしょうか?
BeatStar

2021/11/07 01:44

つまり、『C言語でしかできないことや逆に苦手なことを教えてくれ。言語の選定基準にするから』ってことでしょうか。 それなら『実際に使ってみればいい』のでは。
3_April_2021

2021/11/07 02:28

私は現在、Web系の言語の知識を一程度持っているだけです。 cを考えるのは第一には作りたいものがあるからですが、それには低レベルの言語の理解も含まれます。 少なくともCが作りたいものの方向からCが極端な 無駄になる可能性は低いと見込めたこと(私の現在の知識では断定的に言えませんが、それはいわゆる組み込み系またはそれに近いものを含んでいると思います)、おおよそ作業効率の問題だと見込めたこと、から実際にはcの内容を確認し始めています。
guest

回答2

0

ベストアンサー

適切な入力と出力を与え、コーディングのしやすさや速度や必要になる記憶領域などを度外視すれば、チューリング完全なプログラミニング言語はあらゆるチューリング完全なプログラミング言語をエミュレートすることが可能です。

C言語を含め、一般にプログラミング言語といわれる言語はチューリング完全です。ですので、ほかの言語自体をC言語でエミュレートすることが可能であり、そこに書かれた処理はC言語上でも可能と言うことです。逆もその然りで、C言語でできる処理は他のチューリング完全なプログラミング言語でも可能ということなります。例えば、マリオメーカーはチューリング完全であることが知られていますが、面の大きさとタイムが無限であれば、どんなプログラムでも作ることはできると言うことです。(参考: マリオメーカー — 京大マイコンクラブ (KMC))

ただ、これらはコーディングのしやすさ、速度、メモリなど、もろもろの要素を度外視した場合です。ちょっとしたプログラムでも64GBのメモリがいるとか、一日かかるとかでは意味がありません。ある処理について、その言語を使うのに実用的であるかどうかは、やりたいことによって全く違うので、それが何かわからないとなんとも言えないでしょう。

まとめますと、「論理上、C言語にできないことは無いが、C言語を採用することが実用的であるかどうかはやりたいことによる」となります。

投稿2021/11/07 01:44

raccy

総合スコア21735

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

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

3_April_2021

2021/11/15 12:30

現実性なのか可能性なのか確証が持てなかったので質問をしました。チューリングというこの問題と関与するワードを受け取ったので、質問は締め切られ評価されました。これは、ここで期待した範囲の協力を得たことを意味します。必要に応じて、返信はこの行動の前提条件ではないことに注意してください。 チューリング完全という言葉は(私には)扱いが難しく見えたので、別の表現で確認したいのですが。ここで使用される語彙は、コンピューターのプログラミングに限定されています。まず、high-level languageやassembly languageは、各translaterによってmachine codeに変換されることを知っていました。また、少なくともmachine code以外の言語同士で同じ処理を直接的に書ける「ことがある」ことはおそらく知っていたと言えるはずです、さらに、言語の選択に関与する一つが(時間とデータの量の点での)非現実性であることが仮定されていました。 回答を見て、私は次の疑問を持ちました: 「一般にプログラミング言語といわれる言語」とは、machine codeに変換される言語を意味しますか?それとも、high-level languageを意味しますか?または、machine codeを含むすべての言語(CPUへの命令に関連する)を参照していますか? それらの言語が常に直接翻訳可能であると主張していますか?つまり、変換する二言語以外の言語(low-level language を含みます)やtranslator、ツールを使用しません、つまり、お互いの言語仕様を変更せずに、お互いに同じことを実行できるコードを記述できると意見していますか?
3_April_2021

2021/11/16 02:05

>...す)やtranslator、 このtranslatorは、意図せずに混ざり合った語句ですが、実際には意図されていたようなものです。いずれにせよ読み直すとわかりづらいと感じたので、コメントを追加します。 それがどんな処理でどんな言語source code同士でも、どちらの処理から翻訳されるかどうかに関係なく。その瞬間の2つの言語の仕様をよく知っている人でさえあれば確実にもう片方の言語で書き換えられるのかという疑問を確認しようとしています。
raccy

2021/11/18 10:05

可能であるかどうかは理論上の話です。可能であるかどうかを証明できることと実際にどのようにしたらできるのかどうかは別の話です。 おそらく、何らかのプログラミング言語同士が一対一で翻訳、つまりは書き換え可能なのかどうかを問いたいのだと思います。例えば、「a + b」は「(+ a b)」になるとか、そういった形を言っているのでしょう。もし、そういうことなら、「いいえ」と答えざるをえません。ある言語では一行でかけるような処理でも、違う言語では多くの行が必要になることがあります。また、パラダイムが異なるような言語間では、全体の処理としては同じであっても、その過程での考え方が全く違うというのもあります。 あなたはBrainfuckというプログラミング言語を知っていますか?たった8文字しか使わないこの言語はチューリング完全です。ですので、理論上は、C言語でできることはBrainfuckでもできます。さて、あなたが書いたどんなコードでも、単純に、Brainfuckに書き替えられると言えますか?たぶん、あなたが考えている意味での書き換えはできないとなると思います。
3_April_2021

2022/01/23 06:33

いいえは現実性の答えと受け取っています 理解していませんかもしれませんが非効率的手段に実際に執着しているわけではなく勉強もしますので安心してください
guest

0

やろうと思えば他の方が仰っているように、チューリング完全な言語なのでできるはずです。いろんなことが。

ただ、私の経験上、C言語では『文字列操作』と『文字コード関連』が弱すぎると感じていますね。

他の言語だと、C++ですらstringに相当する文字列系のやつがありますが、Cではchar型配列です。配列なので、要素数がわかってないとできません。
"Hello world" に "CLang " を追加して"Hello CLang world"とするだけでも割と面倒です。C++等であればメンバ関数(メソッド)を介してやるので比較的簡単です。

それに、日本語のような、ほぼ2バイトで一文字を構成するような文字を使う場合も面倒ですね。まあ、できなくはないですが、文字化けしやすかったりしますし。
Javaとかのような言語であれば日本語のような文字も対応できるようです。(JavaのStringはUTF-16として保持しているらしい)

CやC++はコマンドプロンプト等のコマンドラインから起動し、半角英数字のみで処理するような場合か、競技プログラミングのようなアルゴリズム関連には強いですね。(もちろん組み込み系は言うまでもなく)

あとはご自分で動かして体感すべきです。
体験しないことには、誰がなに言っても『相手の主観的なもの』でしかないため、本当にそうなのかわかりませんし。

投稿2021/11/07 02:00

BeatStar

総合スコア4958

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問