我有一些代码,如果用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;
答案 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 ++代码。如果代码使用内存分配运算符new
和delete
,那么您肯定会查看C ++代码。如果您在任何地方都看到范围解析运算符::
,那么您肯定会查看C ++代码。还有一些其他C ++特有的功能(模板,lambdas等)在C中找不到。
C ++不允许使用可变长度数组,而C99和更高版本会这样做 - 如果你看到一个数组声明,其大小由运行时变量给出,比如
int size = 20;
int arr[size];
然后你肯定会关注C99或更高版本。
不幸的是,它就是那么容易停下来的地方。 C ++可以使用stdio.h
例程,以及malloc
和free
进行内存管理。编写可以编译为C 和 C ++的代码是可能的,主要是通过避免使用特定于C ++的语法和关键字以及坚持使用C标准库。