2012-07-04 113 views
1

我已经看到了这对我摆弄的程序:静态常量无效*方法(c)中

static const void *method() 
{ 
// other code 
return anotherMethod(param1,param2); 
} 

对于我个人理解,这将返回一个指针的函数。现在,基于this,我想弄清楚它是什么static const void应用于:

int f(void); 
int *fip(); //Function returning int pointer 
int (*pfi)(); //Pointer to function returning int 

那么什么是添加static const(假设这是适用于看重指定函数的返回的真正优势)。另外,函数的返回指针是否会被调用?或者它只是一个指向它的指针?因为从代码我有以下内容:

void start() 
{ 
    method(); 
} 

我假设它将被调用,否则它将被分配给一个指针。

+1

只是一个注释:我相信你会混淆C和C++。在C++中,'start()'表示'start(void)',前者是鼓励风格。但是在C语言中,'start()'意思是“函数接受各种垃圾参数,希望产生微妙的错误”。在C中,你应该总是写'start(void)'。没有参数的函数被标记为C标准中的过时特征,并且可能在将来从语言中删除(参见C11 6.11.6)。 – Lundin

+0

我实际上在一个objective-c上下文中使用,并且该方法的名称完全是任意的。但是,谢谢你的注意.. – Peres

回答

10

不,该函数将返回const void*static限制函数对文件作用域的可见性。

+0

好吧,所以如果我不关心返回,是否有一个很好的理由来实际返回一个'const void *'?这是一个好习惯吗? – Peres

+3

它通知调用者返回的值不会被修改,所以是的,它是有用的。然而,“常量”可以放弃,但至少意图是明确的,并且调用者必须故意抛弃它,而不是意外地修改它。 – hmjd

1

函数之前的静态关键字并不意味着它会返回一个静态变量。它只是意味着该功能是“静态”的。这意味着此功能无法从“外部”对象访问,如从另一个源文件编译的对象文件。

你给的例子,将返回

const void* 

,并会拒绝链接到该功能的任何外部引用。

0
static const void *method() 

它返回一个“const void *”。这可能是一个函数指针投入void *,但通常情况下不应该如此。

void start() 
{ 
    method(); 
} 

在这里,调用者根本对结果不感兴趣。没有任何魔法发生。

3

static表示该函数对于编译单元(源文件)是私有的,并且在其外部不可见。

const void *表示返回值是指向常量内存的指针,即不应写入的内存。