如何从 C 中的另一个文件访问静态变量?

发布于 2024-08-20 09:27:39 字数 232 浏览 5 评论 0原文

可能的重复:
静态变量

如何从 C 中的另一个文件访问静态变量? 由于静态变量具有文件范围,我认为我们无法在文件外部访问它。但我仍然觉得可能有一些技巧或方法可以做到同样的事情。

Possible Duplicate:
Static variable

How to access a static variable from another file in C?
As a Static variable has a file scope, I think there is no way we can access it outside a file. But still I feel there might be some trick or way to do the same.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

离旧人 2024-08-27 09:27:40

我认为没有简单的方法。如果您可以使用静态变量更改文件,您可以执行以下操作:

static int hiddenVar; // The static var you want to get at

// A new function you write
int * getHiddenVar() {
   return &hiddenVar;
}

但是当然,如​​果您可以更改文件,您只需删除 static 关键字即可。

另外,我怀疑这是否有帮助,但在 FreeBSD 中编写内核模块时我不得不这样做。我使用了一个技巧,调用内核的链接器函数来查找静态函数的地址。不过我怀疑你能否在普通的 C 程序中做到这一点。

I don't think there is a easy way. If you can change the file with the static variable you can do something like:

static int hiddenVar; // The static var you want to get at

// A new function you write
int * getHiddenVar() {
   return &hiddenVar;
}

But of course if you can change the file, you would just drop the static keyword.

Also, I doubt this helps, but I've had to do something like this when writing a kernel module in FreeBSD. I used a trick where I called the kernel's linker functions to find the address of a static function. I doubt you can do this in a normal C program though.

时光瘦了 2024-08-27 09:27:40

在声明中使用 extern 关键字来指定变量来自另一个文件(外部链接)。删除原始定义中的 static 关键字。

本文解释了外部链接与内部链接的关系。

Use the extern keyword in your declaration to specify that the variable comes from another file (external linkage). Drop the static keyword in your original definition.

The external vs. internal linkage thing is explained in this article.

慢慢从新开始 2024-08-27 09:27:40

您只能间接执行此操作,例如,如果包含静态变量的文件范围内的函数向您传递指向它的指针。

You can only do this indirectly, e.g. if a function within the scope of the file containing the static variable passes you a pointer to it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文