如何重新识别C或C++

How to recongnise C or C++

本文关键字:C++ 识别 何重新      更新时间:2023-10-16

我有一些代码,我不知道它是用C还是C++编写的。

根据这篇文章:

我相信它是C,因为有些函数是在使用后声明的,例如

void main() {
foo();
}
void foo() {
printf( "Hello world" );
}

然而,它确实有一个原生的布尔类型-根据上面的网站:

C不提供本机布尔类型。您可以使用enum,不过:typedef enum{FALSE,TRUE}bool;

知道代码是C、C++还是其他什么吗?或者有什么需要注意的常见问题吗?

此外,当我在函数外声明一个变量时,我必须写:

int test;

然后在函数中为其赋值,而不是能够这样做:

int test = 5;

它使用隐式函数声明(对于foo()printf(),所以如果它是任何东西,那么它就是C89。隐式函数声明从未出现在C++中,并且在C99中从C中删除。


为了回答"如何识别C或C++"的问题,有大量的C++不是有效的C,还有少量的C不是有效的C++。因此,需要对这两种语言都有合理的了解。

您显示的代码肯定不是C++(C++不允许隐式声明),尽管它也不是严格正确的C。foo的隐式int声明(仅在C89中有效)与后来的显式void声明/定义相矛盾——任何像样的C编译器都应该对此大喊大叫。

此外,在C或C++中(至少在托管实现中),void不是main的正确返回类型。

判断代码是否为C++的一个非常简单的方法是查看标准头。如果标头没有尾部.h,如

#include <iostream>
#include <string>

等等。,那么你肯定在看C++代码。如果代码使用内存分配运算符newdelete,那么您肯定看到的是C++代码。如果您在任何地方看到作用域解析操作符::,那么您肯定在看C++代码。还有一些其他C++特有的特性(模板、lambdas等)在C.中找不到

C++不允许可变长度的数组,而C99和更高版本则允许-如果您看到一个数组声明,其中大小由运行时变量给定,如

int size = 20;
int arr[size];

那么你肯定会看到C99或更高版本。

不幸的是,这就是它不再那么容易的地方。C++可以使用stdio.h例程,以及用于内存管理的mallocfree。编写同时编译为CC++的代码是可能的,主要是通过避免C++特定的语法和关键字,并坚持使用C标准库。