无法在 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'

更新于: 2019年7月30日

413 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告