0

このトピックに関するオンライン リソースをいくつか見つけましたが、その仕組みをまだ理解できません。

ファイルに次の仕様を持つグローバル変数があると仮定しましょう: /sys/sys/sysctl.h

#define USER_TZNAME_MAX     20   /*test var*/

およびファイル /usr/src/sys/kern/kern_mib.ca 内

SYSCTL_INT(_user, USER_TZNAME_MAX, tzname_max, CTLFLAG_RW, 0, 0, "something");

変数値を変更し、ACソースファイルに別の値を設定する方法を実際に示すことができる人はいますか?

ありがとうございました

4

2 に答える 2

0

プログラムでは、sysctl(3)を使用してシステム情報を取得または設定する必要があります。

于 2013-03-12T23:16:25.803 に答える
0

#define USER_TZNAME_MAXはグローバル変数を定義していません。これはプリプロセッサ マクロです。

コンパイラがコードをコンパイルする前に、プリプロセッサが実行されてマクロが展開され、定義によって定義されたコードが含まれる/除外されます。

このような例では、プリプロセッサはソース内の文字列「USER_TZNAME_MAX」のすべてのインスタンスを文字列「20」に置き換えます。

// this
int i = USER_TZNAME_MAX;

// will be expanded to this:
int i = 20;

したがって、a) 変数ではなく、b) 定数であるため、実行時にこの変数を変更することはできません。

独自のコードで使用されている値を変更することについて話している場合は、次のようにすることができます。

#ifdef USER_TZNAME_MAX
#undef USER_TZNAME_MAX
#endif

#define USER_TZNAME_MAX (32)
于 2013-02-28T05:55:01.973 に答える