C/C++ 笔记 -- 基本概念(1)

背景:最近打算跳槽了,把以前翻过的书温习下,顺便记一记笔记,可能比较杂。


基本概念

关于main
1、C++的main函数的限制
   不能重载,不能内联
   不能定义为静态的
   不能取其地址,不能自己调用自己。
2、main函数
   进入之前初始化全局变量(extern或static),若main结尾没有return语句,则等效return 0;

关于名字修饰(name mangling)
1、编译器为变量和函数生成不同的内部名字。C和C++的生成方式不一样。对于C只要考虑static和
全局函数与变量名的区别,而C++要考虑class,struct,union, namespace,同一作用于域重载函数
等等类似的情况需要一套Name Mangling方案,不同编译器的实现方案不一样。这样说来同一平台的
不同编译器编译的.o文件是不兼容的。

关于连接规范
由于不同语言(C,C++)的Name Mangling问题,不同语言在编译的连接阶段需要考虑这些差异而使用
不同的连接规范。比如在C++代码里,使用C编译的函数或变量使用extern "C"。

全局变量(global, static)
全局变量的声明和定义应放在源文件的开头位置。
由于全局变量会在main之前初始化,同一编译单元(cpp文件)按所定义的顺序初始化,而不同编译
单元在连接是全局变量的初始化顺序不确定,所以全局变量的初始化不要引用另一个全局变量来做。

换行与回车的区别
它们都有不同的ASCII码。
换行,用于文件和字符终端的输出控制,表示从新的一行开始,通过在键盘上敲击“回车”键(输入
“回车”字符)转换为文件或字符终端的“换行”字符,已达到从新一行的效果。程序输出“换行”
也达到换行效果。
回车,是一种键盘功能,用于输入控制,比如代替“鼠标左击”的功能,他不能输出。
函数getchar()可以将键盘的“回车”输入转换为“换行”字符返回。

const防小人不妨君子
const符号只是在编译时强制类型安全检查,设定不允许“直接”修改,但对于运行是的修改无能为力。
const int i = 10;
int *p = (int*)&i;
*p = 100;
count << i << endl; // 10
cout << *p << endl; // 100 

C与C++中const 的区别
C中const 是默认外连接的, C++中const符号常量是内连接的。导致一个头文件中定义常量后,如果
在不同的源文件(编译单元)中同时包含这个头文件,C会提示重复定义的错误,而C++编译时则认为
不同的符号常量分配空间,链接是进行常量合并。C在头文件中定义符号常量时必须使用static修饰,
或在源文件中定义,其他编译单元通过extern方式使用。

类中的常量
非静态的类常量数据成员,必须在对象的构造函数的初始化列表中进行,而不能在类的声明中进行。
这种常量的缺点是不能建立整个类的常量,而依靠类对象的不同而定。要建立整个类恒定的常量通常

通过类中的枚举常量和类的静态常量数据成员。


函数的调用规范

参见此篇

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值