如何识别C或C ++

时间:2017-10-31 22:24:02

标签: c++ c

我有一些代码,如果用C或C ++编写,我就无法解决。

根据this article

我认为它是C,因为有些函数在使用后声明,例如。

void main() {
    foo();
}

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

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

  

C不提供本机布尔类型。你可以使用一个来模拟它   但是枚举:typedef enum {FALSE,TRUE} bool;

知道代码是C,C ++还是别的什么?还是要注意什么常见的事情?

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

int test;

然后在函数中为其赋值,而不是能够执行:

int test = 5;

2 个答案:

答案 0 :(得分:10)

它使用隐式函数声明(对于foo()printf(),所以如果它是任何东西,它是C89。隐式函数声明从来没有在C ++中被删除来自C99的C.

要回答问题"如何识别C或C ++",有大量的C ++不是有效的C,并且有少量的C不是& #39; t有效的C ++。因此,需要对这两种语言有合理的知识水平。

答案 1 :(得分:4)

你所展示的代码绝对不是C ++(C ++不允许隐式声明),尽管它也不是严格正确的C语言。 int的隐式foo声明(仅在C89中有效)与后面的显式void声明/定义相矛盾 - 任何体面的C编译器都应该对此大吼大叫。

此外,void不是C或C ++中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进行内存管理。编写可以编译为C C ++的代码是可能的,主要是通过避免使用特定于C ++的语法和关键字以及坚持使用C标准库。