我找到了一些关于这个主题的在线资源,但仍然无法理解它是如何工作的。
假设我有一个具有以下规范的全局变量 在文件中:/sys/sys/sysctl.h
#define USER_TZNAME_MAX 20 /*test var*/
并在文件/usr/src/sys/kern/kern_mib.c 中
SYSCTL_INT(_user, USER_TZNAME_MAX, tzname_max, CTLFLAG_RW, 0, 0, "something");
任何人都可以实际演示如何更改变量值并在 c 源文件中设置另一个值吗?
谢谢
最佳答案
#define USER_TZNAME_MAX
不是定义全局变量,它是一个预处理器宏。
在编译器编译代码之前,预处理器会运行以扩展宏并包含/排除定义所定义的代码。
在这样的示例中,预处理器将用字符串“20”替换源中字符串“USER_TZNAME_MAX”的所有实例:
// 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)
关于从c代码调用freebsd中的内核变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15128197/