C言語での質問です。
###質問
char型の文字列aがあります。
aにprintf("a")やstrlen("aaa")と、書いてあったら、
それを実行して、戻り値をint型のbに代入したいのですが、
switchやifを使わずにできないのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
C言語はコンパイラ型の言語ですので、実行中に構文を解釈して関数を呼び出すようなことは標準機能ではできません。
もし実現するのであれば、少なくとも以下の処理は必要になると思います。
・関数ポインタを使用し、使用するであろう関数を事前に登録しておく
・文字列を関数名と引数に自力で分解し、対応する関数ポインタの関数を実行
あまり実装するメリットはないと思うので、質問の発想は諦めて、別の処理方法を考えた方が良いと思います。
投稿2017/04/05 00:11
総合スコア16996
0
C言語では、基本的にほぼ無理です。
というのも、関数名などの情報は(デバッグ情報を除いて)コンパイル時点で消えてしまうので、実行時に名前から関数を参照しようにも、そもそも情報がないのです。
なお、JavaScriptやPHP、Rubyといったインタプリタ型の言語では、文字列からコードを実行するeval
という機能があります。
投稿2017/04/05 00:07
総合スコア145121
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
こんにちは。
C言語は一般にコンパイラです。
コンパイラは入力されたソース・コードを事前にマシン語へ変換しておき、後でそれを起動する仕組みです。もし、どうしても必要であればC言語からCコンパイラを起動して対象のソースをビルドして実行する事になります。
コンパイル動作が入るため、1塊のソースの実行に最低でも数秒かかる悲惨な処理性能になります。
また、対象のソースと現プログラムとの間のデータのやり取りはかなり手間がかかります。更に、セキュリティ的なリスク回避(悪意のあるソース・コードを処理しない仕組み)も難しいです。
C言語には主に学習目的でインタプリタも存在しますが、-maeda-さんがお望みの機能に対応していない可能性も高いです。(標準のC言語に存在しない機能ですから。)
その場合は、その機能をご自身で実装する必要があり、それは冒頭に述べたコンパイラを使う方法と大差ないだろうと思います。
コンパイラを起動しない分、実行速度はかなり「まし」になるとは思います。
投稿2017/04/05 00:48
総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
switchやifを使わず
文字列の中身により何かを実行することはできますが、ifなどを使わずだと余計プログラムがややこしくなるでしょう。簡単にはできないですね。switch,ifを使えば簡単です。
投稿2017/04/05 00:31
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
char型は文字列では有りません。
というのは置いといて、if や switch を使わずにというのは無理があると思います。
投稿2017/04/05 00:01
総合スコア306
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。