IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++真的能兼容C吗? -> 正文阅读

[C++知识库]C++真的能兼容C吗?

今天看到了网上说C是C++的子集,C++可以兼容C,这是真的吗?

要弄明白这个问题,首先,先简单介绍一下这两个语言
在这里插入图片描述

C:C语言是一门面向过程的、抽象化的通用程序设计语言。C语言诞生于美国的贝尔实验室,C语言之所以命名为C,是因为他的前身是B语言,经过多年发展,最终在1972年,正式推出。

C++:C++是一种高级程序设计语言,1979年,本贾尼·斯特劳斯特卢普,对C进行了改良工作,改良后,该语言被正式命名为C++。

以据以上介绍,C++确实是从C改进而来,但是,它真的能和C兼容吗?也就是网上说的

用C语言编写的程序可以不加修改地用于C++

是这样吗?

我来测试一下,下面的6段代码,分别在C和C++中是否可以正常编译、运行。

测试环境:cygwin、gcc 11.2

准备完毕,开始

在这里插入图片描述

1.一般函数调用

#include <stdio.h>
int main()
{
    AAA();
    return 0;
}
int AAA()
{
    printf("调用了");
    return 0;
}

C编译:虽然产生了警告,但正常编译通过
在这里插入图片描述

C++编译:产生编译错误,提示AAA函数没有声明
在这里插入图片描述
结论:c++调用函数前,需要函数存在,或者函数需要向前声明,过后再实现,但是C不用,被调用的函数可以在调用函数前后任何地方

2.无形参,但有实参的函数调用

#include <stdio.h>
void aaa()
{

}
int main()
{
  aaa();
  aaa(1);
  return 0;
}

C编译:正常编译通过
在这里插入图片描述
C++编译:产生编译错误,提示过多的参数在这里插入图片描述
结论:总结,在 C++ 中,调用一个无参数的函数:fun() 相当于调用 fun(void) ,在C 中,调用无参数函数,fun() 相当于调用fun(…),所以,在C中无参数函数,调用时,是可以传入实参的

3.void指针与其他类型指针之间的转换

#include <stdio.h>
int main()
{
    void* voidptr = 0;
    char* cptr = voidptr;
    //下面两行代码,C++中可以编译
    //char* cptr = (char*)voidptr;
    return 0;
}

C编译:正常编译通过
在这里插入图片描述
C++编译:产生编译错误,提示无效的转换,VOID* 到char*
在这里插入图片描述
结论:void指针void*,在C中,void*可以赋值给任意类型的指针,但是在C++中必须要显式转换类型后才可以。如第7行写法,便可以

4.关于const变量和指针

#include <stdio.h>
int main()
{
  const int a;
  const int b = 1;
  int *c = &b;
  //以下代码C++可以正常编译
  //const int d =1;
  //const int *e = &d;
    return 0;
}

C编译:虽然产生了警告,但正常编译通过
在这里插入图片描述
C++编译:产生编译错误,变量a提示了,必须要初始化a。变量ab则提示了不能把const int* 转为int*
在这里插入图片描述
总结:const变量在c中,是无需赋给初始值的,但是C++中不行,同时,C++中const变量指针,不能复制给非const变量指针,但C中可以

5.入口函数,main

#include <stdio.h>
char* main()
{
  
}

C编译:正常编译通过
在这里插入图片描述
C++编译:产生编译错误,提示要求返回int类型
在这里插入图片描述
结论:在C中,main函数,可以返回任何类型,但在C++中必须要返回int类型

6.关于字符长度的区别

#include <stdio.h>
int main()
{
  printf("%d", sizeof('c'));
  return 0;
}

以上代码在C++中运行结果
在这里插入图片描述
以上代码在C中运行结果
在这里插入图片描述
结论:在C中,字符将会被当作int类型使用,长度为4,C++中,字符就字符类型,长度为1


总结:C++虽然改造自C,但是二者并非完全兼容,且语法中存在一定差异,上述几点,并非C与C++全部差异

在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:20:07  更:2022-03-22 20:21:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:49:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码