C++ 11/14/17/20 new feature
自从C++11以来的新特性 auto 自动类型推导 constexpr nullptr 关键字, 用于取代 NULL, 代表空指针 for 循环中的 语法糖 for ( a : array) { } lambda 表达式, 也就是匿名函数 自从C99以来的新特性 变长数组 VLA; 结构体 按成员初始化 restrict 关键字 bool 类型
namespace
namespace (命名空间) 是C++的一个关键字 不同的命名空间中相同的标识符在编译的时候不会产生错误 在不同的命名空间中可以使用相同名字的变量或者函数名称 C 语言的标识符 也有命名空间 (内容来自 C语言规范草案 6.2.3 节) label names标签名 包括 goto 语句 中用到的标签和 switch case中的 标签 the tags name of structures, unions and enumurations结构、联合、枚举的tag名 the members of structures or unions; each structure or union has a seperate name space for its number;结构体、联合的成员名 all other identifiers,called ordinary identifiers (declared in ordinary declarators or asenumeration constants)其他普通的变量,或者枚举常量 C++中使用namesapce ...
About IPC
IPC (Inter-Porcess Communication) 进程间通信 多个进程需要协作的时候通信必不可少 IPC 的五种基本方法 Pipes / FIFOs 管道 Message Queues 消息队列 Shared Memory 共享内存 POSIX Semaphores POSIX 信号量 Sockets 套接字 Pipes 的特性 兼容性问题:最早的时候都是半双工,有的系统却提供了全双工的管道 适用范围的问题:只能在具有相同的祖先进程的进程间使用,多数情况是在父子进程之间使用 Pipes 的使用 使用pipe需要了解两个函数 123456789// 需要包含头文件 <unistd.h>int pipe(int fd[2]); // 创建两个文件描述符,fd[0] 用于读取,fd[1]用于写入// 需要包含头文件 <unistd.h> 和 <sys/types.h>pid_t fork(void); // 通过复制父进程创建子进程// 标准头文件 <stdio.h>// The popen() fu...
About Lint
lint 或者 linter是 一种静态程序分析工具 这里的静态是指在不运行程序的情况下检查代码潜在的问题 最早在Unix平台上开发用于检查C语言程序的 后来被其他的语言借鉴形成了各种各样的lint工具,以提升代码的健壮性 splint 是现在的 linux上的lint工具 安装方法 如下1# apt-get install -y splint splint 从哪里知道的? 来自《C专家编程》中的某个章节 简单用法12345// func.cint func(int /*@unused@*/a,char **b){ return 0;} 1$ splint func.c 会输出警告信息 详细用法可以参考1man splint
About memory
此处讨论的是物理内存,说的是内存的物理特性,不涉及虚拟内存,内存映射等话题内存(RAM)分为 静态内存(SRAM)和动态内存(DRAM)静态随机存取存储器是随机存取存储器的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。相对之下,动态随机存取存储器里面所储存的数据就需要周期性地更新。然而,当电力供应停止时,SRAM储存的数据还是会消失 摘自[维基百科](https://zh.wikipedia.org/zh-cn/E9%9D%99%E6%80%81%E9%9A%8F%E6%9C%BA%E5%AD%98%E5%8F%96%E5%AD%98%E5%82%A8%E5%99%A8) 特性对比表格: 内存类型 SRAM DRAM 可用阶段 系统启动过程的任意时刻均可用 需要在初始化频率等之后 生产成本 高 低 常见使用场景 寄存器,cache 运行内存 组成物理器件 略 略
keywords
关键字与标识符经常考察的关键字 const * 常量 和指针一起 考察 voliate * 容易修改,禁止编译器优化,嵌入式,和多线程环境 extern * 外部引用,声明 static * 本文件,或者本函数可用,本类可用 auto * 自动变量、栈变量, 类型推导 register * 请求编译器将 变量放到寄存器 不常见的关键字 restrict *