可能是重复问题:
“C子集C++” -> 在哪里不是?有例子吗?
我知道C++不是C的严格超集。什么语言特性防止C++成为C的超集?
可能是重复问题:
“C子集C++” -> 在哪里不是?有例子吗?
我知道C++不是C的严格超集。什么语言特性防止C++成为C的超集?
房间里的大象:以下是有效的C语言代码,但不是有效的C++代码。
int typename = 1;
替换您喜欢的C++保留字。
int new = 1;
。 - SheetJSC++也不支持可变长度数组,即:
int array[n];
C语言中有效,但在C++中无效。以上代码的C++版本如下:
int *array = new int[n];
...
delete [] array;
std::vector<int>
替换 new int[]
和 delete[]
。 - fredoverflowarray
将会在栈上分配。如果 n
太大了,那么如果你很幸运的话,实现会由于信号(或其他操作系统驱动因素)而终止。如果你不幸的话,实现将盲目地继续破坏其他人的内存。这取决于操作系统/编译器。 - Steve Jessop举个简单的例子,考虑以下声明:
int f();
f(3, 2, -5, "wtf");
解释:在C中,int f()
被视为 int f(...)
(至少在第一次调用时)。如果您不想让函数f接受参数,请声明为 int f(void)
。int f()
和int f(...)
并不完全一样,它们之间有很大的语义差别。在第一种情况下,这意味着我不知道该函数的参数,在首次遇到函数调用时,使用默认类型作为参数声明函数的签名,随后的调用必须遵守这个隐式原型,并且如果你使用其他参数调用该函数,编译器应该会发出警告。而对于带省略号的情况,每次调用都可以使用不同的参数而不会被警告。 - Patrick Schlüter我能想到的一个例子是,C++不支持默认的int类型。