ユーザーが変数の名前と型を入力して新しく変数を宣言するプログラムってどのようにしたらいいでしょうか?OS Xです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
スクリプト言語Luaを組み込んで、ユーザーにはLuaでスクリプトを組んでもらうという手は無きにしもあらずです。
LuaはC言語とは文法が変わりますが、製品で組み込まれているものもあります。
もちろんC言語との連携も可能です。
投稿2017/11/17 08:02
総合スコア3579
0
言語によっては、メタプログラミングといって、「指定された名前の変数を作る」と言うような操作を容易にできるものも存在します(Rubyなどは、かなり柔軟性が高いです)。
しかしながら、C言語は、コンパイル時に変数名の情報が全て消えてしまうなど、実行時のメタプログラミングには全く向かない言語です。別な言語で実装することをおすすめします。
投稿2017/11/14 13:42
編集2018/06/01 02:09総合スコア145121
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
それ、考えてみればわかると思いますが、ようするに新しいプログラミング言語を作るってことです。
「コンパイラやインタプリタを書く」ことを目指さないといけません。
まだ「プログラムの書き方」がわからないようなら、とても難しいでしょう。「プログラムの書き方」が分からない人が「プログラミング言語」を作るわけですから。
ヒントとしては、コンパイラの作り方 インタプリタの作り方 みたいな検索をすれか、あるいは書籍でコンパイラが書名に入っている本を買って読んでみるのがいいと思います。
投稿2017/11/14 12:14
総合スコア11029
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ユーザーが変数の名前と型を入力して新しく変数を宣言するプログラム
もし、キーボードからの入力を取得したいみたいなことでしたら、
「C言語 入力」とか検索すると、目的のものが見つかるかも。
さて、大喜利大会になっているようなので、面白そうだから、
ここからは引用部を文字通りの意味で解釈してみましょう。
入力によって新しい変数を宣言するにはどうするか?
Ruby
1self.class.const_set :'Something', Class.new 2some = Something.new 3p some.class #=> 'Something'
Rubyは動的言語なので、クラスを動的生成できます。
つまり、実行時に、入力などから取得した情報で、クラスを作れます。
同様に動的に、クラスにメソッドもつけられるし、インスタンス変数を持たせられるので、
(宣言文を使わなくても)動的に変数の宣言ができると解釈して良いでしょう。
こうしたメタプログラミングは、Rubyの得意分野で、実用上もメリットがあります。
ただ、型はどうなったのか。これは、クラスが型だと見なせるでしょう。
というかRubyは、よく言われるように「型がない」というより、
「動的型付け」の言語だと考えた方が実態に合っています。
C言語が変数側に型を持つのに対して、Rubyでは値側に型を持つという違いです。
さらに、Cが「弱い静的型付け」、Rubyは「強い動的型付け」とも言われます。
だから、RubyではCのように、キャストや暗黙の型変換で、型安全性を破壊できません。
(ただし言語標準の話。型変換する実装を書けば可能)
クラスが型だという根拠は、そもそもオブジェクト指向のクラスが、
「抽象データ型」「ユーザ定義型」だから、型なんです。
Rubyでは「すべてがオブジェクト」ですが、そのすべてに型があります。
投稿2017/11/17 12:42
総合スコア5592
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
C言語で動的に変数を増やすのは無理です.
変数自体を増やすのは無理ですが、ハッシュテーブルを用いて
「動的に拡張する、名前を持った」データ置き場なら作れない事もないです.
そこに、
c
1enum VarType{ INT, CHAR, STRING}; 2typedef struct { 3 enum VarType type; 4 union{ 5 int i32; 6 char chr; 7 struct{ 8 int len; 9 char str[0]; 10 } str; 11 } data; 12} Var;
みたいなものを格納することで擬似的に変数を作成できます.
投稿2017/11/17 11:38
編集2017/11/17 11:40総合スコア15147
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ぱっと思いついた方法は変数名を保存する変数とデータを保存する動的な変数を内包するクラスを作り、それを変数の宣言に使用する方法です。
インスタンスの生成は変数名で検索をかけて、コピーすれば良いかと思われます。
果たしてなにに使うか検討も付きませんが…
投稿2017/11/17 05:01
総合スコア295
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。