1:复合语句也被称为语句块,它至少要包含两条语句
但是你不妨在语句里写个空也行,只不过这种操作必然会被编译器过滤掉
2:死代码
死代码的英文是dead code。是指在程序操作过程中永远不可能被执行到的代码。
通过AQtime覆盖率的分析就可以发现所有的永远都不会执行到的代码,但是与程序无关的代码却不一定能够全部发现。
消除死代码(DCE)在某些情况下,
编译器可以判断出某些代码根本不影响输出,所以编译器会消除这些代码。也可以使用优化作用进行消除。
3:在一个表达式中
只要除法中没有浮点数或者没有显式转换,那么就会被约掉精度。
4:
write函数所在的头文件为 <unistd.h>
write有两种用法。一种是:
ssize_twrite(int handle, void *buf, int nbyte);
handle 是
文件描述符;
buf是指定的缓冲区,即
指针,指向一段内存单元;
nbyte是要写入文件指定的字节数;返回值:写入文档的字节数(成功);-1(出错)
write函数把buf中nbyte写入文件描述符handle所指的文档,成功时返回写的字节数,错误时返回-1.
另一种是:write(const char* str,int n)
write("string",strlen("string");表示输出
字符串常量
5:
请问下面的程序一共输出多少个“-”?
1
2
3
4
5
6
7
8
9
|
int main( void )
{
int i;
for (i = 0 ; i < 2 ; i++) {
fork();
printf( "-" );
}
return 0 ;
}
|
fork类型的题目
一共调用了6次printf,但是会输出8个-。因为父进程的输出缓冲也会被子进程复制
fork(); // i=0
printf("-"); // buffer="-"
fork(); // i=1
printf("-"); // +1
printf("-");
printf("-")
fork(); // i=1
printf("-"); // +1
printf("-")
printf("-"); // buffer="-"
fork(); // i=1
printf("-"); // +1
printf("-");
printf("-")
fork(); // i=1
printf("-"); // +1
printf("-")
fork()系统调用的特性,
- fork()系统调用是Unix下以自身进程创建子进程的系统调用,一次调用,两次返回,如果返回是0,则是子进程,如果返回值>0,则是父进程(返回值是子进程的pid),这是众为周知的。
- 还有一个很重要的东西是,在fork()的调用处,整个父进程空间会原模原样地复制到子进程中,包括指令,变量值,程序调用栈,环境变量,缓冲区,等等。
5:
构造函数中变量的初始化顺序是按其定义的顺序,与初始化列表中的顺序无关。所以一定要注意。