したがって、C のコードを含む文字列があり、通常の C コード以外のものが含まれているファイルから予想通り読み取られたとします。この文字列をプログラムで使用できるコードに変換するにはどうすればよいでしょうか? インタープリター全体を作成する必要がありますか、それとも既にこれを行っているライブラリがありますか? 問題のコードは、実際の C ファイルで宣言したサブルーチンを呼び出す可能性があるため、ストック C コマンドのみを考慮したものは機能しない可能性があります。
2 に答える
うわー。Cでは、これは実際にはかなり難しいです。
基本的に、いくつかのオプションがあります。
コードを解釈する
これを行うには、インタープリターを作成する必要があり、C の解釈はかなり難しい問題です。過去に利用可能な C インタープリターはありましたが、最近は読んでいません。いずれにせよ、本当にこれが必要でない限り、独自のインタープリターを作成するのは大きなプロジェクトです。
グーグルはpicocのようないくつかのオープンソース (部分的) C インタープリターを示しています
コンパイルして動的にロードする
コードをキャプチャしてラップし、構文的に完全な C ソース ファイルを作成できる場合は、動的にロード可能な C ライブラリ (Windows では DLL、UNIX のその他のバリアントでは .so) にコンパイルできます。次に、実行時に結果をロードできます。
通常、誰かがこれを行うようになるのは、いくつかの複雑なスクリプト関数を表現できる必要があるためです。別の言語を使用する可能性を考えたことはありますか? Python、Scheme (guile)、Lua は、スクリプト言語として C アプリケーションに簡単に追加できます。
Cにはこのような性質はありません。これは、Cがコンパイルされ、コードが実行を開始する前にコンパイラーがコードの多くのビルドを行う必要があるため(したがって、入力として文字列を受け取る)、その場で簡単に変更することはできません。コンパイルされた言語には剛性があり、インタプリタされた言語には柔軟性があります。
あなたはPerl、Python PHPなど、いわゆる「第4世代言語」について考えています。この柔軟性を表す専門用語がcsにあると確信していますが、Cにはありません。この種の文字列を頻繁に使用する必要があるタスクがある場合は、これらの言語の1つに切り替える(そしてパフォーマンスを放棄する)必要があります。/e
たとえば、正規表現を使用してPerlのフラグを確認してください。
Cでは、アプリケーションを設計する必要があるため、これを行う必要はありません。これは一般的に非常に実行可能です。その非OO性やその他の欠陥に関しては、多くの巨大で複雑なアプリケーションが適切に記述されたCで問題なく実行されます。