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

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

ただいまの
回答率

87.49%

ユーザーが変数を宣言

受付中

回答 7

投稿

  • 評価
  • クリップ 0
  • VIEW 956

ユーザーが変数の名前と型を入力して新しく変数を宣言するプログラムってどのようにしたらいいでしょうか?OS Xです。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 7

+1

こんにちは。

質問の意味を取り違えていたらすいません。

C言語の場合プログラムを作る人は変数を宣言できますが、プログラムを使うだけの人は変数を宣言することはできません。変数宣言もプログラムの一部ですので、使うだけの場合は無理なのです。

ユーザさんが自分でプログラムを修正してビルドして使うのであれば可能です。普通にプログラムを作る時とやり方は同じです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

それ、考えてみればわかると思いますが、ようするに新しいプログラミング言語を作るってことです。
「コンパイラやインタプリタを書く」ことを目指さないといけません。
まだ「プログラムの書き方」がわからないようなら、とても難しいでしょう。「プログラムの書き方」が分からない人が「プログラミング言語」を作るわけですから。

ヒントとしては、コンパイラの作り方 インタプリタの作り方 みたいな検索をすれか、あるいは書籍でコンパイラが書名に入っている本を買って読んでみるのがいいと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/11/27 22:38

    ありがとうございました。

    キャンセル

+1

言語によっては、メタプログラミングといって、「指定された名前の変数を作る」と言うような操作を容易にできるものも存在します(Rubyなどは、かなり柔軟性が高いです)。

しかしながら、C言語は、コンパイル時に変数名の情報が全て消えてしまうなど、実行時のメタプログラミングには全く向かない言語です。別な言語で実装することをおすすめします。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

スクリプト言語Luaを組み込んで、ユーザーにはLuaでスクリプトを組んでもらうという手は無きにしもあらずです。
LuaはC言語とは文法が変わりますが、製品で組み込まれているものもあります。
もちろんC言語との連携も可能です。

C と lua の連携方法メモ

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

ぱっと思いついた方法は変数名を保存する変数とデータを保存する動的な変数を内包するクラスを作り、それを変数の宣言に使用する方法です。
インスタンスの生成は変数名で検索をかけて、コピーすれば良いかと思われます。
果たしてなにに使うか検討も付きませんが…

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/11/27 22:38

    ちょっと思いたったので。多分使わないと思いますが…笑

    キャンセル

0

C言語で動的に変数を増やすのは無理です.

変数自体を増やすのは無理ですが、ハッシュテーブルを用いて
「動的に拡張する、名前を持った」データ置き場なら作れない事もないです.
そこに、

enum VarType{ INT, CHAR, STRING};
typedef struct {
  enum VarType type;
  union{
    int i32;
    char chr;
    struct{
      int len;
      char str[0];
    } str;
  } data;
} Var;

みたいなものを格納することで擬似的に変数を作成できます.

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

ユーザーが変数の名前と型を入力して新しく変数を宣言するプログラム

もし、キーボードからの入力を取得したいみたいなことでしたら、
「C言語 入力」とか検索すると、目的のものが見つかるかも。


さて、大喜利大会になっているようなので、面白そうだから、
ここからは引用部を文字通りの意味で解釈してみましょう。

入力によって新しい変数を宣言するにはどうするか?

self.class.const_set :'Something', Class.new
some = Something.new
p some.class #=> 'Something'

Ruby動的言語なので、クラス動的生成できます。
つまり、実行時に、入力などから取得した情報で、クラスを作れます。

同様に動的に、クラスにメソッドもつけられるし、インスタンス変数を持たせられるので、
(宣言文を使わなくても)動的に変数の宣言ができると解釈して良いでしょう。
こうしたメタプログラミングは、Rubyの得意分野で、実用上もメリットがあります。


ただ、型はどうなったのか。これは、クラスが型だと見なせるでしょう。

というかRubyは、よく言われるように「型がない」というより、
「動的付け」の言語だと考えた方が実態に合っています。

C言語が変数側に型を持つのに対して、Rubyでは値側に型を持つという違いです。
さらに、Cが「弱い静的型付け」、Rubyは「強い動的型付け」とも言われます。

だから、RubyではCのように、キャストや暗黙の型変換で、型安全性を破壊できません。
(ただし言語標準の話。型変換する実装を書けば可能)

クラスが型だという根拠は、そもそもオブジェクト指向のクラスが、
「抽象データ」「ユーザ定義」だから、型なんです。
Rubyでは「すべてがオブジェクト」ですが、そのすべてに型があります。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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