在使用 C 时,开发人员可能偶然发现了一些令人费解的语法,该语法允许使用括号括起来声明变量。像 int (x) = 0; 这样的声明甚至 int (((x))) = 0;可能会让人们想知道它们的目的和实用性。
这个谜题的答案在于分组的概念。考虑声明一个指向 f(int) 类型函数的指针的示例。标准方法 int *f(int); 被解释为返回 int* 的函数。但是,要正确指定指向该函数的指针,必须引入括号以形成 int (*f)(int);。
同样的原则也适用于数组声明。声明 int *x[5];表示五个 int* 的数组,而 int (*x)[5];指向一个由五个 int 组成的数组。
在提供的代码片段中:
struct B { }; struct C { C (B *) {} void f () {}; }; int main() { B *y; C (y); // Oops, compiler error! }
目的是构造一个 C 类型的对象,该对象将在其析构函数中执行有用的操作。然而,编译器错误地解释了C(y);作为 C 类型变量 y 的声明,导致重定义错误。这就是括号分组发挥作用的地方。通过将构造函数调用封装为 C (y) 而不是 C(y),编译器的解释得到纠正,允许代码按预期进行编译。
以上是为什么在 C 变量声明中使用括号?的详细内容。更多信息请关注PHP中文网其他相关文章!