如何重新识别C或C++
How to recongnise C or C++
我有一些代码,我不知道它是用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++代码。如果代码使用内存分配运算符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标准库。
- 提升 ASIO 无法识别计时器对象
- 从udp接收帧对于人脸识别来说太慢
- 模板类无法识别友元运算符
- std::visit无法识别类型
- 无法识别模板功能
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 如何在LLVM中dyn_cast以识别StoreInst?
- 从不同的附加依赖项中识别等同命名的函数
- C++出现控制台错误.我无法识别源代码的问题
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- Qt:"Q3DScatter"即使包含在内也无法识别
- 使用指针的类识别
- 如何静态识别动态堆分配?
- 为什么C++无法识别我的对象实例化?
- C++ 无法识别创建进程'telnet'
- 识别 2D 矢量C++中的位置
- 如何识别项目是 QT 中的文件还是文件夹
- ESP32 无法识别任何设备已连接到其接入点
- 无法识别 Mac c++ 文件系统库
- 识别数组中的重复元素?