• extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 ‘extern’ 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置

  • register 用于定义寄存器变量,表示该变量被频繁使用,可以存储在CPU的寄存器中,以提高程序的运行效率。

  • static 用于定义静态变量,表示该变量的作用域仅限于当前文件或当前函数内,不会被其他文件或函数访问

  • const 定义常量,表示该变量的值不能被修改。。

  • 在 C++ 中,需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见时,可将其定义为静态数据。

  • “program”: “/root/c_socket/socket/a.out”

  • C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。

  • assert宏的原型定义在<assert.h>中,其作用是先计算表达式expression的值为假(即为0),那么它就先向stderr打印一条出错信息,然后通过条用abort来终止程序;

  • 在了解extern之前首先要知道C++中得单定义规则。所谓的单定义规则(One Definition Rule,ODR)是指变量只能有一次定义。为了满足这种需求,c++提供了两种变量声明。一种是定义声明(defining declaration)简称定义,它给变量分配内存空间;另外一种是引>用声明

  • warning: implicit declaration of function ‘printf # include <stdio.h>

  • 没有引入 stdio.h

  • redir.c:18:1: error: stray ‘\343’ in program

  • 有中文字符

  • typedef 定义一个类型

  • std:: 是个名称空间标示符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准函数库中的函数或对象都要使用std来限定。

  • 对象count是标准函数库所提供的对象,而标准库在名字空间中被指定为std,所以在使用cout的时候要加上std::
    这样编译器就会明白我们调用的cout是名字空间std中的cout。

  • C++中引入了命名空间,所谓命名空间就是一个可以由用户自己定义的作用域,
    在不同的作用域中可以定义相同名字的变量,互不干扰,系统能够区分它们。

  • void 类型 函数返回为空 函数参数为空 指针指向void

  • 当函数不需要返回值值时,必须使用void限定,这就是我们所说的第一种情况。例如:void func(int a,char *b)

  • 当函数不允许接受参数时,必须使用void限定,这就是我们所说的第二种情况。例如:int func(void)。

  • void 指针可以指向任意类型的数据

  • static 编译器在程序的生命周期内保持局部变量的存在,不需要每次他进入
    和离开作用域时进行创建和销毁

  • namespace 定义一个范围, 不同范围内 变量名称可以重复,
    类似于不同文件夹下面的重名文件

  • 在 C 语言中,可以采用命令 #define 来定义宏。

  • 该命令允许把一个名称指定成任何所需的文本

  • 例如一个常量值或者一条语句。在定义了宏之后,无论宏名称出现在源代码的何处,预处理器都会把它用定义时指定的文本替换掉。

  • #define 和 #include 一样,也是以“#”开头的。凡是以“#”开头的均为预处理指令,#define也不例外

  • #define 的功能是将标识符定义为其后的常量。一经定义,程序中就可以直接用标识符来表示这个常量

  • 变量名表示的是一个变量,但宏名表示的是一个常量。可以给变量赋值,但绝不能给常量赋值。

  • 宏定义最大的好处是“方便程序的修改”。使用宏定义可以用宏代替一个在程序中经常使用的常量。注意,是“经常”使用的。这样,当需要改变这个常量的值时,就不需要对整个程序一个一个进行修改,只需修改宏定义中的常量即可