0

質問はそれをすべて言うべきです。

メイン プロジェクトとは別のローカル ファイル "mydefaultvalues.txt" があるとします。メインプロジェクトでは、次のようなものが必要です。

 char * defaultvalues = " ... "; // here should be the contents of mydefaultvalues.txt

そして、コンパイラー" ... "が の実際の内容と交換できるようにしmydefaultvalues.txtます。これはできますか?コンパイラ指令のようなものはありますか?

4

4 に答える 4

4

正確ではありませんが、次のようなことができます。

defaults.h:

#define DEFAULT_VALUES "something something something"

code.c:

#include "defaults.h"

char *defaultvalues = DEFAULT_VALUES;

defaults.h を生成できる場所、または作成する予定の場所。プリプロセッサができることは限られています。ファイルを理解できる形式にすると、作業がはるかに簡単になります。

于 2012-06-19T02:04:34.537 に答える
3

Linuxで私がしたトリックは、Makefileに次の行を含めることでした。

defaultvalues.h: defaultvalues.txt
    xxd -i defaultvalues.txt > defaultvalues.h

次に、以下を含めることができます。

#include "defaultvalues.h"

unsigned char defaultvalues_txt[];ファイルの内容とファイルunsigned int defaultvalues_txt_len;のサイズの両方で定義されます。

defaultvalues_txtこれはnullで終了しないため、C文字列とは見なされないことに注意してください。しかし、あなたもサイズを持っているので、これは問題ではないはずです。

編集:

小さなバリエーションでは、nullで終了する文字列を使用できます。

echo "char defaultvalues[] = { " `xxd -i < defaultvalues.txt` ", 0x00 };" > defaultvalues.h

明らかに、ファイル内にヌル文字が存在する場合はうまく機能defaultvalues.txtしませんが、プレーンテキストの場合は機能しません。

于 2012-06-19T02:15:27.397 に答える
2

このようなコンパイル時のトリックを実現する1つの方法は、単純な検索と置換を行う、解釈されたプログラミング言語(Python、Ruby、Perlなど)で単純なスクリプトを作成することです。次に、コンパイルする前にスクリプトを実行します。

スクリプトが検索する独自の#pramgaXYZディレクティブを定義し、それを文字列内のファイルの内容で変数を宣言するコードに置き換えます。

char * defaultvalues = ...

ここで、...には、指定されたテキストファイルから読み取られたテキスト文字列が含まれます。行の長さ、新しい行、文字列の書式設定文字、およびその他の特殊文字を必ず補正してください。

編集:lvellaは、はるかに優れたアプローチで私を打ち負かしました-環境が提供するツールを採用してください。この場合、文字列検索を実行し、ファイルを置き換えてフィードするツールです。

于 2012-06-19T02:15:57.867 に答える
-1

私は知っている遅い答えですが、zxcdwが本当に近づいたにもかかわらず、現在の答えのどれもOPが達成しようとしていることを扱っているとは思いません。

7歳の子供がしなければならないのは、プログラムを16進エディタにロードし、CTRL-Sを押すことだけです。テキストが実行可能コード(またはその周辺)またはアプリケーションリソースにある場合は、テキストを見つけて編集できます。

一般の人々がリソースを変更したり、静的データを暗号化したりするのを防ぎたい場合は、リソースに詰め込み、実行時に復号化します。最初は小さなものでDESを試してください。

于 2012-06-19T04:54:24.013 に答える