【发布时间】:2011-08-11 14:29:31
【问题描述】:
我有这个程序
#include <stdio.h>
int main()
{
char arr[100];
printf("%d", (int)sizeof(0,arr));
}
这在编译为 C 文件时打印 4,并在 C++ 文件中打印 100。为什么?我正在使用 gcc。
【问题讨论】:
-
请注意,使用逗号运算符的唯一原因是产生求值的副作用,但
sizeof操作的表达式不会被求值。 -
声明的数组在 C 中的每个 场合都衰减为一个指针,except 当它作为
sizeof或@987654325 的操作数出现时@-操作员。在您的情况下,情况并非如此,因此它被转换为指针。在 C++ 中,仅在需要时才转换数组。 -
一个很好的例子,说明为什么用 C++ 编译器编译 C 是一种错误的做法。
-
像这样(或几乎以任何其他方式)使用逗号运算符是一种错误的做法。