无法在 C++ 中编译的 C 程序
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; }
输出(C)
Hello World
输出(C++)
[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); }
输出(C)
The value of x: 10
输出(C++)
[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"); }
输出(C)
Done
输出(C++)
[Error] invalid conversion from 'void*' to 'int*' [-fpermissive]
在 C++ 中,我们必须初始化常量变量,但在 C 中,它可以在没有初始化的情况下编译通过。
C 语言在线演示。
示例
#include<stdio.h> int main() { const int x; printf("x: %d",x); }
输出(C)
x: 0
输出(C++)
[Error] uninitialized const 'x' [-fpermissive]
在 C 中,我们可以使用名为 'new' 的变量。但在 C++ 中,我们不能使用这个名称作为变量名,因为在 C++ 中,'new' 是一个关键字。它用于分配内存空间。
C 语言在线演示。
示例
#include<stdio.h> int main() { int new = 10; printf("new: %d",new); }
输出(C)
new: 10
输出(C++)
[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)
c = 123
输出(C++)
[Error] invalid conversion from 'int' to 'char*' [-fpermissive]
在 C 中,我们可以使用 void 作为 main() 的返回值类型,但在 C++ 中,我们必须使用 int 作为 main() 的返回值类型。
C 语言在线演示。
示例
#include<stdio.h> void main() { printf("Hello World"); }
输出(C)
Hello World
输出(C++)
[Error] '::main' must return 'int'
广告