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

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

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

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

Q&A

解決済

6回答

1315閲覧

変数に書いてある関数を実行する。

-maeda-

総合スコア34

C

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

0グッド

1クリップ

投稿2017/04/04 23:50

C言語での質問です。
###質問
char型の文字列aがあります。
aにprintf("a")やstrlen("aaa")と、書いてあったら、
それを実行して、戻り値をint型のbに代入したいのですが、
switchやifを使わずにできないのでしょうか。

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

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

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

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

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

guest

回答6

0

C言語はコンパイラ型の言語ですので、実行中に構文を解釈して関数を呼び出すようなことは標準機能ではできません。
もし実現するのであれば、少なくとも以下の処理は必要になると思います。
・関数ポインタを使用し、使用するであろう関数を事前に登録しておく
・文字列を関数名と引数に自力で分解し、対応する関数ポインタの関数を実行

あまり実装するメリットはないと思うので、質問の発想は諦めて、別の処理方法を考えた方が良いと思います。

投稿2017/04/05 00:11

ttyp03

総合スコア16996

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

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

0

C言語では、基本的にほぼ無理です。

というのも、関数名などの情報は(デバッグ情報を除いて)コンパイル時点で消えてしまうので、実行時に名前から関数を参照しようにも、そもそも情報がないのです。

なお、JavaScriptやPHP、Rubyといったインタプリタ型の言語では、文字列からコードを実行するevalという機能があります。

投稿2017/04/05 00:07

maisumakun

総合スコア145121

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

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

0

ベストアンサー

こんにちは。

C言語は一般にコンパイラです。
コンパイラは入力されたソース・コードを事前にマシン語へ変換しておき、後でそれを起動する仕組みです。もし、どうしても必要であればC言語からCコンパイラを起動して対象のソースをビルドして実行する事になります。

コンパイル動作が入るため、1塊のソースの実行に最低でも数秒かかる悲惨な処理性能になります。
また、対象のソースと現プログラムとの間のデータのやり取りはかなり手間がかかります。更に、セキュリティ的なリスク回避(悪意のあるソース・コードを処理しない仕組み)も難しいです。

C言語には主に学習目的でインタプリタも存在しますが、-maeda-さんがお望みの機能に対応していない可能性も高いです。(標準のC言語に存在しない機能ですから。)
その場合は、その機能をご自身で実装する必要があり、それは冒頭に述べたコンパイラを使う方法と大差ないだろうと思います。
コンパイラを起動しない分、実行速度はかなり「まし」になるとは思います。

投稿2017/04/05 00:48

Chironian

総合スコア23272

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

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

-maeda-

2017/04/05 08:10

ありがとうございます。 switchを使います。
guest

0

  1. 与えられた文字列を含むC言語のソースコードを生成する
  2. Cコンパイラを呼び出して上記ソースコードをコンパイルする
  3. 上記プログラムを実行して実行結果を何らかの方法で元のプログラムに戻す

とすればできると思いますが、危険だし遅いだしで、他の方法を考えた方がよいと思います。
(ifをまったく使わなくても一応動くものはできると思いますが、現実的ではないし、そもそも危険です)

投稿2017/04/05 02:23

ockeghem

総合スコア11701

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

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

0

switchやifを使わず

文字列の中身により何かを実行することはできますが、ifなどを使わずだと余計プログラムがややこしくなるでしょう。簡単にはできないですね。switch,ifを使えば簡単です。

投稿2017/04/05 00:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

char型は文字列では有りません。

というのは置いといて、if や switch を使わずにというのは無理があると思います。

投稿2017/04/05 00:01

WoodenHamlet

総合スコア306

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問