C:声明指向函数的易失性指针

osg*_*sgx 14 c volatile

如何在C中声明一个指向函数的指针,以使指针本身是易失性的.

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

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

static void (* volatile f_pointer)(void*);
Run Code Online (Sandbox Code Playgroud)

为什么我问这个?我在http://wiki.answers.com/Q/Volatile_example_code_sample_coding_of_volatile_pointer上阅读了关于volatile指针的内容.

有时挥发性指针和指向volatile的问题:

现在,事实证明指向volatile变量的指针非常常见.这两个声明都声明foo是一个指向volatile变量的指针:

volatile int * foo; 
int volatile * foo; 
Run Code Online (Sandbox Code Playgroud)

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

int * volatile foo;
Run Code Online (Sandbox Code Playgroud)

所以,我希望获得一个易失性指针,而不是指向"volatile"函数的指针.

谢谢

Jer*_*fin 17

将星号视为"障碍".比星号更接近变量名的限定符(constvolatile)修改指针本身.限定符比变量名更远,而不是星号修改指针将引用的内容.因此,在这种情况下,您将拥有:

static void * volatile f_pointer(void *);
Run Code Online (Sandbox Code Playgroud)

当然,除了你需要parens来定义一个函数指针而不是声明一个返回指针的函数:

static void (*volatile f_pointer)(void *);
Run Code Online (Sandbox Code Playgroud)

static是存储类,而不是一个限定词,所以同样是没有真正的在其情况.您只能为变量本身指定存储类,而不是它指向的存储类.没有"指向extern int"或"指向static int"的指针,只有"指向int的指针".如果指定存储类(staticextern),它始终是第一位的.

其他线程已经讨论了线程之间的关系,volatile因此我不会在此重复,除非注意到这可能没有用.


Car*_*rum 10

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>
Run Code Online (Sandbox Code Playgroud)

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


Oys*_*ein 8

static void (* volatile f_pointer)(void*);
Run Code Online (Sandbox Code Playgroud)