首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C:声明易失性指针为函数

C:声明易失性指针为函数
EN

Stack Overflow用户
提问于 2011-02-02 17:41:51
回答 3查看 7.7K关注 0票数 14

如何将指针声明为C中的函数,以便指针本身是不稳定的。

代码语言:javascript
复制
static void volatile (* f_pointer)(void*);

static void (volatile * f_pointer)(void*);

static void (* volatile f_pointer)(void*);

我为什么要问这个?我在http://wiki.answers.com/Q/Volatile_example_code_sample_coding_of_volatile_pointer上读到了有关易失性指针的文章。

有时,易失性指针和指向易失性的指针会出现问题:

现在发现,指向易失性变量的指针非常常见。这两个声明都声明foo是一个指向易失性整数的指针:

代码语言:javascript
复制
volatile int * foo; 
int volatile * foo; 

指向非易失变量的

易失性指针非常罕见(我想我曾经使用过它们),但我最好继续给出语法:

代码语言:javascript
复制
int * volatile foo;

因此,我希望获得一个用于函数的易失性指针,而不是指向“易失性”函数的指针。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-02 17:54:25

把星号想象成一个“障碍”。限定符(constvolatile)更接近变量名,而不是星号修改指针本身。比星号更远的限定符,修改指针将引用的内容。因此,在这种情况下,您应该:

代码语言:javascript
复制
static void * volatile f_pointer(void *);

当然,除了需要parens定义指向函数的指针外,而不是声明返回指针的函数:

代码语言:javascript
复制
static void (*volatile f_pointer)(void *);

static是一个存储类,而不是一个限定符,所以在它的情况下也不是这样。您只能为变量本身指定存储类,而不能指定它指向的内容。没有“指向extern int的指针”或“指向静态int的指针”,只有“指向int的指针”。如果您指定了一个存储类(staticextern),那么它总是第一位的。

其他threads已经讨论了线程处理和volatile之间的关系,所以我不会在这里重复这一点,只是指出这可能没有用。

票数 20
EN

Stack Overflow用户

发布于 2011-02-02 17:45:59

对于这类问题,cdecl非常有用:

代码语言:javascript
复制
$ cdecl
Type `help' or `?' for help
cdecl> declare f_pointer as static volatile pointer to function(pointer to void) returning void
static void (* volatile f_pointer)(void *)
cdecl>

cdecl的来源:http://cdecl.org/files/cdecl-blocks-2.5.tar.gz

票数 10
EN

Stack Overflow用户

发布于 2011-02-02 17:45:00

代码语言:javascript
复制
static void (* volatile f_pointer)(void*);
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4877841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档