C ++语言是通过在C语言中添加一些其他功能(如面向对象的概念)而设计的。大多数C程序也可以使用C ++编译器进行编译。尽管有些程序无法使用C ++编译器进行编译。
让我们看一些将在C编译器中编译但不在C ++编译器中编译的代码。
在此程序中,C ++代码将出现一个编译错误。因为它正在尝试调用之前未声明的函数。但是在C中可能会编译
C的现场演示。
#include<stdio.h> int main() { myFunction(); // myFunction() is called before its declaration } int myFunction() { printf("Hello World"); return 0; }
Hello World
[Error] 'myFunction' was not declared in this scope
在C ++中,一个普通的指针不能指向某些常量,但是在C中,它可以指向。
C的现场演示。
#include<stdio.h> int main() { const int x = 10; int *ptr; ptr = &x; printf("The value of x: %d", *ptr); }
The value of x: 10
[Error] invalid conversion from 'const int*' to 'int*' [-fpermissive]
在C ++中,当我们想要将其他指针类型(如int *,char *)分配给void指针时,必须显式地进行类型转换,但是在C中,如果未对类型进行强制类型转换,则会对其进行编译。
C的现场演示。
#include<stdio.h> int main() { void *x; int *ptr = x; printf("Done"); }
Done
[Error] invalid conversion from 'void*' to 'int*' [-fpermissive]
在C ++中,我们必须初始化常量变量,但是在C中,无需初始化即可对其进行编译。
C的现场演示。
#include<stdio.h> int main() { const int x; printf("x: %d",x); }
x: 0
[Error] uninitialized const 'x' [-fpermissive]
在C语言中,我们可以使用一些名为“ new”的变量。但是在C ++中,我们不能将此名称用作变量名,因为在C ++中,“ new”是关键字。这用于分配内存空间。
C的现场演示。
#include<stdio.h> int main() { int new = 10; printf("new: %d",new); }
new: 10
[Error] expected unqualified-id before 'new' [Error] expected type-specifier before ')' token
我们无法在C ++中编译以下代码。当我们尝试将int转换为char *时,这将返回错误。但是在C语言中,它将正常工作。
C的现场演示。
#include<stdio.h> int main() { char *c = 123; printf("c = %u", c); }
c = 123
[Error] invalid conversion from 'int' to 'char*' [-fpermissive]
在C语言中,我们可以将void用作返回值main()
,在C ++语言中,我们必须将int用作返回值main()
。
C的现场演示。
#include<stdio.h> void main() { printf("Hello World"); }
Hello World
[Error] '::main' must return 'int'