1.minGW: 提供了简便的windows下的基于gcc程序开发环境。minGW收集了一系列免费的windows使用的头文件和库文件;同时整合了GNU的工具集,特别是GNU程序开发工具,如经典的gcc、g++、make等。minGW完全免费,在windows平台上模拟了linux下GCC开发环境,为C++的跨平台开发提供了良好的基础支持。
2. DJGPP:在WINDOWS平台下,我们一般用VC的编译器CL来编译我们的源程序,但在LINUX平台下,人们一般使用GCC(GNU Compiler Collection)。GCC也有在WINDOWS平台下的移植版本——DJGPP。有了DJGPP,我们就可以在WINDOWS平台下使用GCC了。
3.解决优先级反转的策略
1)一般以 __asm __volatile打头,用()包括起来;
2)每句语句用""包括起来;
3)多语句之间用 \n或\nt分隔;
4)专用寄存器用%%的打头表示;
__asm__ __volatile__ (
"mov %0, #55\n"
"mov %1, #66\n"
"xor %%eax, %%eax\n"
)
asm(
"mov r0, r0\n\t"
"mov r0, r0\n\t"
"mov r0, r0\n\t"
"mov r0, r0"
);
5. NULL与整数0不同。
空指针常量,An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant
如0、0L、'\0'、3 - 3、0 * 17 或(void*)0都是空指针常量。
NULL是空指针常量。
当空指针常量表示指针时,就是空指针,也可以表示成NULL
空指针指向什么内存地址没有规定,系统一般实现是指向0地址。空指针的内部用全 0 来表示,称为零值空指针。有些系统实现空指针使用非零值空指针。
指针变量 p 是空指针的判断: if ( p == 0 ) if ( p == '\0' ) if ( p == 3 - 3 )
if ( p == NULL ) /* 使用 NULL 必须包含相应的标准库的头文件 */ if ( NULL == p ) if ( !p ) if ( p == q )
6.float数据类型精度为何是至少6位呢?
float浮点类型由IEEE754标准进行存储。1位符号位,8为指数位,23为尾数位(隐藏1位1),这样表示小数的最多可以用24位表示,这24二进制位,用八进制表示就是可以精确到8位,用十进制表示可以精确到至少6位。
7.volatile关键字
volatile修饰的变量表示编译器不要对其进行优化,该变量的值随时可能发生变化,需要每次从内存中读取。
使用场景:
(1) 并行设备的硬件寄存器
(2) 一个中断服务子程序中会访问到的非自动变量(全局变量)
(3)多线程应用中被几个任务共享的变量
8.static关键字
在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
9.单工、半双工、全双工、同步、异步通信区别
单工:指仅能单方面传输。
双工:指两台数据设备之间,允许有双向的数据传输。
半双工:允许设备之间的数据双向传输,但不能同时进行。好比作单轨的铁路或者对讲机。
全双工:允许设备之间的数据双向传输,可以同时进行。好比作一个双向的车道或者手机。
同步传输模式:发送方和接收方的时钟是统一的,字符与字符间的传输是同步无间隔的。
异步传输模式:并不需要发送方和接收方的时钟完全一样,字符与字符间的传输是异步的。
10. find 搜索目录下的文件
grep搜索文件中的字符串
find ./ -name "file.txt" 在当前目录及目录下搜索file.txt文件
grep -r "file" ./ 在当前目录及子目录下的文件中搜索file字符串。