返回类型的效果是静态的

时间:2011-02-17 05:27:01

标签: c

返回静态类型数据可能会产生什么影响。我们什么时候应该使用它?

static ssize_t
my_read(int fd, char *ptr)
{
    //code from Stevens Unix Network programming. 
      if (something)
         return (-1)
      if (something else)
          return (0)


      return (1)
}

为什么静态在这里?

感谢。

3 个答案:

答案 0 :(得分:30)

该函数是静态的,而不是返回类型。这意味着它的名称仅在当前编译单元中可见,该单元用作封装机制。

但是,仍然可以通过函数指针从其他地方调用该函数。

有关更多背景信息,另请参阅this discussion on the general static keyword

答案 1 :(得分:1)

当返回指向在被调用函数中创建的变量的指针时,我们使用静态数据类型。例如

float * calculate_area(float r) 
{
    float *p;
    static float area;   
    p=&area;   
    area=3.14*r*r;
    return p;
}

如果你将区域设置为自动变量,即没有任何类型限定符,当控制从被调用函数返回时它将被销毁。当声明为静态时,你也可以正确地从main中检索区域的值。因此它为了它坚持其价值,我们将其视为静态。

答案 2 :(得分:0)

通过使用static,对静态函数的访问仅限于声明了它们的文件 使函数成为静态的另一个原因是在其他文件中重用相同的函数名。

//file1
static void fun1(void) 
{ 
  cout<<"file1";
} 


// file2
// now if we include file1 and use fun1 in file2 , it
// will show “undefined reference to `fun1’” error as 
// it fun1 is defined static

int main(void) 
{ 
  fun1();  
  getchar(); 
  return 0;   
}