gpt4 book ai didi

c - 多源文件中的 extern volatile

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:07 26 4
gpt4 key购买 nike

我有一些全局变量需要在多源文件上共享。我读过How do I share variables between different .c files?并执行以下操作:

fileA.h:

extern int a;

fileA.c:

int a;
// using a variable here

一切都编译良好并且工作正常。但是因为我在多线程环境下编程,所以我在每个变量前都加上了 volatile 关键字。所以现在是:

fileA.h:

extern volatile int a;

fileA.c:

int a;
// using a variable here

但是我用这种方式编译时遇到错误:

error: conflicting type qualifiers for ‘a’ in file included from fileA.c:4:0:

请为我解释为什么,以及如何解决这个问题?在这种情况下我们应该使用 volatile 吗?

最佳答案

变量的任何声明都应与其实际定义一致。因此,如果 extern volatile int a; 的包含文件中的声明应该在实际定义变量的文件中具有关联的 volatile int a;

另见这篇文章 How to use C's volatile keyword包括一些关于多线程应用程序的信息。

请注意,对于多线程应用程序,您可能需要对共享变量使用某种锁定或其他互斥机制。参见 Why is volatile not considered useful in multi-threaded C or C++ programs

volatile 关键字的主要作用是通知编译器变量可能会因当前范围之外的某些操作而发生变化,因此它会影响编译器生成机器代码的方式。

请参阅这篇简短的文章 Compiler optimization and the volatile keyword .

并查看 Dobbs 博士的这篇文章 volatile: The Multithreaded Programmer's Best Friend

关于c - 多源文件中的 extern volatile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com