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

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

ただいまの
回答率

90.50%

  • C

    3694questions

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

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

解決済

回答 6

投稿

  • 評価
  • クリップ 1
  • VIEW 463

-maeda-

score 16

C言語での質問です。

質問

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

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 6

+3

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

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+3

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

+2

こんにちは。

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

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/04/05 17:10

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

    キャンセル

0

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

switchやifを使わず

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • C

    3694questions

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