山高疑日近,海阔觉天低

C/C++

一,C 与 C++ 不同
C++ 通常被认为是C的增强版. C++ 通常被认为是“C with class”, 这一点在C++创立之初非常正确, 但是随着时间的推移,C增加了很多特点,其中某些C++没有,总的来说C++是 C 加上 Object-Oriented Programming(面向对象编程)Exception Handling(异常处理), 模板, 于此同事C++更耗资源.

Parameter C C++
编程规则 C 面向过程 面向对象.
Approach C follows a top-down approach C follows the bottom-up approach.
关键字长度 32 63
数据类型 C 仅支持内置数据类型 支持用户typedef 数据类型,注意和#define宏不同
头文件 <stdio.h> <iostream.h>
内存分配/释放 calloc(),malloc() /free() new operator /delete operator
访问权限(OOP) 不支持 支持protected,public,private修辞
安全性(OOP) 不支持 支持数据隐藏封装
引用变量 不支持 支持 void function(int &n)
函数重载/覆盖 不支持 支持
异常处理 不支持 支持 try – catch block
程序部分 C 是面向过程的, 所以C程序可以划分成函数块 C++ 是面向对象的, 所以C++程序可以划分成类块
内联函数 不支持 支持
兼容性 C代码可以用C++编译器编译 C++代码不可以用C编译器编译
标准输入/输出 scanf() /printf() cin / cout
适用范围 网络驱动、文本编辑器、汇编器等底层实现 适合于高级实现,如游戏开发、智能手表、嵌入式系统等
命名空间 不支持 支持

二,extern “C”{}作用
1.C++调用C

这种情况仅仅需要高速C++编译器 调用的函数是C格式的,一般需要在.c文件的头文件加 #ifdef __cplusplus  extern “C” { #endif,如下

#ifdef __cplusplus
 extern "C" {
#endif
............code.......
#ifdef __cplusplus
}
#endif

#ifdef __cplusplus这个条件宏保证了,c编译器不受影响,gcc编译.o文件链接格式是C语言格式,g++链接.o里面的文件需要知道.o里面的函数是c语言格式的.引用c的头文件g++编译器就知道了
2.C调用C++
C如果要调用C++函数,那么C++函数必须用C格式去编译,故cpp文件函数也要声明函数按照C格式编译

//头文件 *.h
#ifdef __cplusplus
 extern "C" {
#endif
 void fun(int);
#ifdef __cplusplus
}
#endif
//cpp文件 *.cpp
extern "C" void fun(int)
{
}

头文件的extern “C” 保证其它cpp文件调用这个函数都知道是按照C格式编译,cpp的extern “C”保证g++ 按照c的格式去编译这个函数
三,算术优先级
下表列出 C++ 运算符的优先级和结合性。各个运算符以优先级的降序从上至下列出。
原文

 

优先级 运算符 描述 结合性
1 :: 作用域解析 从左到右
单目右
2 a++   a-- 后缀自增与自减
type()   type{} 函数风格转型
a() 函数调用
a[] 下标
.   -> 成员访问
3 ++a   --a 前缀自增与自减 从右到左
单目左
+a   -a 一元加与减
!   ~ 逻辑非逐位非
(type) C 风格转型
*a 间接(解引用)
&a 取址
sizeof 取大小[注 1]
co_await await 表达式 (C++20)
new   new[] 动态内存分配
delete   delete[] 动态内存分配
4 .*   ->* 成员指针 从左到右
算术:
5 a*b   a/b   a%b 乘法、除法与余数
6 a+b   a-b 加法与减法
7 <<   >> 逐位左移与右移
8 <=> 三路比较运算符(C++20 起) 从左到右
关系
9 <   <= 分别为 < 与 ≤ 的关系运算符
>   >= 分别为 > 与 ≥ 的关系运算符
10 ==   != 分别为 = 与 ≠ 的相等性运算符
11 & 逐位与 从左到右
逻辑单
12 ^ 逐位异或(互斥或)
13 | 逐位或(可兼或)
14 && 逻辑与 从左到右
逻辑双
15 || 逻辑或
16 a?b:c 三元条件[注 2] 从右到左
逻辑三
赋值
throw throw 运算符
co_yield yield 表达式 (C++20)
= 直接赋值(C++ 类默认提供)
+=   -= 以和及差复合赋值
*=   /=   %= 以积、商及余数复合赋值
<<=   >>= 以逐位左移及右移复合赋值
&=   ^=   |= 以逐位与、异或及或复合赋值
17 , 逗号 从左到右 逗号

分析表达式时,运算符的优先级与结合性影响表达式中运算对象组合的方式。
记忆口诀:单目右、单目左、算术、关系、逻辑单、逻辑双、逻辑三、赋值、逗号。

赞(0) 打赏
未经允许不得转载:Mr.Zhang » C/C++

你的打赏是我的动力

登录

找回密码

注册