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

#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 回答
0

在程序中,您应该使用sysctl(3)来获取或设置系统信息。

于 2013-03-12T23:16:25.803 回答