【问题标题】:bizarre C statement [duplicate]奇怪的C语句[重复]
【发布时间】:2013-07-16 10:22:44
【问题描述】:
void test(int x[static 10]);  

int main()  
{  
    int a[]={1,2,3,4,5,6,7,8,9,10,11};  
    test(a);  
    return 0;  
}  

void test(int x[static 10])  
{  
    printf("%d",x[9]);  
} 

我一直在寻找奇怪的 C 语句。我找到了这个,但不明白static 10 在那个声明中有什么用。和int x[10]一样吗?

另外,您也可以使用volatile 代替static 例如int x[volatile 10]
有人知道这种声明有什么用吗?

PS:使用 GCC 4.6.3 编译,

【问题讨论】:

标签: c c99


【解决方案1】:

这是对编译器的提示,告诉编译器x 指针参数指向至少包含10 元素的数组的第一个元素。

例如:

test(NULL);  // undefined behavior

【讨论】:

  • 这是有效的 C++ 吗?它在优化中有多有用(即像内联还是更好?) - 只是想获得更多信息,谢谢
  • 是的,但是程序运行没有错误,即使提供的参数不是至少 10 也会发出警告
  • @ChrisCM 查看我的示例,传递 NULL 参数是未定义的行为。
  • hm.. @ouah 如,编译时检查?它与将 NULL 传递给 (int x[]) 有何不同?
  • @AK4749 关于 C++,据我所知 C++ 中不存在此功能
猜你喜欢
  • 2012-03-14
  • 2013-12-12
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多