3

これは私の最初の投稿です。漠然としすぎている場合や、誰もが直感的に推測できる情報を提供している場合は、お知らせください。

私はCで書くのが初めてで、前処理をよりよく理解しようとしています。を使用してコンソールから直接引数を受け取ることができる単純なプログラムを作成していますgcc -Wall -std=c99 -DSEED=argument。ここで、引数は整数である必要があり-Dます。定義されていない場合はユーザーが入力します。

SEED 値は単に で使用されsrand()ます。-DSEED=a引数としてを入力するとコンパイルされるのに、なぜコードがコンパイルされないのか、非常に混乱してい-DSEED=1ます。「âaâ undeclared (first use in this function)」というエラーが表示され、2 つの違いがよくわかりません。変数の型を入力と一致させたと思った#defineので、「a」を入力すると #SEED は char になり、「1」を入力すると #SEED は int になります。

SEED が定義されていない場合は、#ifndef SEEDコマンドを使用していますが、これはうまく機能します。SEED入力を「文字列化」してから、それが整数かどうかを確認できると思います。オンラインでいくつかの記事を読んだ後、私は使用しようとしています:

#ifndef SEED
    //code
#else
    #define TO_STRING( input ) #input
    char c;
    c = TO_STRING( SEED )
    //Then I was going to use c to figure out if it was an int.
#endif

これは機能していません。私が持っていると思われる誤解を指摘できる人なら誰でも大歓迎です。

編集 - を試したときにエラーメッセージが表示された理由はわかりまし-DSEED=aた。変数として読み取っていたからです。

4

1 に答える 1

7

を文字列#define化するには、2段階のアプローチを使用する必要があります。

#define _STRINGIFY(s) #s
#define STRINGIFY(s) _STRINGIFY(s)

...

#define SEED 123

...

const char * pszSeed = STRINGIFY(SEED); /* 'pszSeed' would point to "123" form here on. */

*pszSeed1つの文字だけを使用する場合は、またはを使用してアクセスしますpszSeed[0]

于 2012-10-11T16:43:33.567 に答える