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

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

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

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

Q&A

7回答

1244閲覧

ユーザーが変数を宣言

KaniKaniorther

総合スコア12

C

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

0グッド

0クリップ

投稿2017/11/14 10:19

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

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

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

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

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

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

guest

回答7

0

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

C と lua の連携方法メモ

投稿2017/11/17 08:02

PineMatsu

総合スコア3579

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

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

0

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

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

投稿2017/11/14 13:42

編集2018/06/01 02:09
maisumakun

総合スコア145121

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

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

0

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

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

投稿2017/11/14 12:14

quickquip

総合スコア11029

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

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

guest

0

こんにちは。

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

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

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

投稿2017/11/14 10:39

Chironian

総合スコア23272

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

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

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

LLman

総合スコア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
asm

総合スコア15147

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

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

0

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

投稿2017/11/17 05:01

iwanote

総合スコア295

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

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

KaniKaniorther

2017/11/27 13:38

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問