如何将指针声明为C中的函数,以便指针本身是不稳定的。
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是一个指向易失性整数的指针:
volatile int * foo;
int volatile * foo; 指向非易失变量的
易失性指针非常罕见(我想我曾经使用过它们),但我最好继续给出语法:
int * volatile foo;因此,我希望获得一个用于函数的易失性指针,而不是指向“易失性”函数的指针。
谢谢
发布于 2011-02-02 17:54:25
把星号想象成一个“障碍”。限定符(const或volatile)更接近变量名,而不是星号修改指针本身。比星号更远的限定符,修改指针将引用的内容。因此,在这种情况下,您应该:
static void * volatile f_pointer(void *);当然,除了需要parens定义指向函数的指针外,而不是声明返回指针的函数:
static void (*volatile f_pointer)(void *);static是一个存储类,而不是一个限定符,所以在它的情况下也不是这样。您只能为变量本身指定存储类,而不能指定它指向的内容。没有“指向extern int的指针”或“指向静态int的指针”,只有“指向int的指针”。如果您指定了一个存储类(static或extern),那么它总是第一位的。
其他threads已经讨论了线程处理和volatile之间的关系,所以我不会在这里重复这一点,只是指出这可能没有用。
发布于 2011-02-02 17:45:59
对于这类问题,cdecl非常有用:
$ 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
发布于 2011-02-02 17:45:00
static void (* volatile f_pointer)(void*);https://stackoverflow.com/questions/4877841
复制相似问题