2017-05-03 20 views
0

私は、コマンドラインに値I入力に次の値を変更しますbashスクリプトを作成しようとしています:定義済みの値をどのように再定義しますか?

#ifndef SIZE 
#define SIZE 10 
#endif 

は、私がSIZEの値を変更することができる方法はありますか?

+0

あなたは 'sed'を使ってソースコードを変更したいですか?それはCと全く関係がありますか?コンパイルスイッチを使って '-DSIZE = 30'を変更したいのですか? –

+0

私はそれを理解しているので、実行時に 'SIZE'の値を10から20に変更したいのですか?もしそうなら、答えはノーです。プリプロセッサのコマンド(そのうちの '#define'は1)は、コンパイルプロセスの早い段階で処理されます。 '#define'で何が起こるかは、コードが解析される前でも、文字列' SIZE'のすべての出現が10で置き換えられることです。あなたができることは、デフォルトで10に初期化された変数(例えば 'size')を持ってから、コマンドライン引数を処理し、必要に応じて変数を変更することです。 – thurizas

+0

これを行う最善の方法は、そのようなすべての定数を別々のヘッダーに入れ、必要に応じてそれらのヘッダーを編集/生成することです。 GCCの機能を使用してプリプロセッサの定数を生成するのは悪い考えです。移植性と標準Cのために努力してください。 – Lundin

答えて

2

プログラムをコンパイルするときに-DSIZE=30をGCCに渡すと、SIZEは最初から30と定義されます。次に、質問に表示されているコードが既に定義されているかどうかをチェックするので、10と定義されません。

+0

"30"の値にロイヤリティを要求しています。 –

+0

ありがとう!私はGCCの-DSIZEについてもっと知りたいと思います。 詳細については、Googleで検索することをお勧めしますか? – MasterGL

+0

@MasterGLこれは[「プリプロセッサを制御する」](https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#Preprocessor-Options)セクションにあります。私は "gccコマンドライン"をGoogleで検索し、そのページのインデックスを使用しました。 – unwind

関連する問題