static定义与赋值的区别
首先看如下一段代码:
1 |
|
实际打印结果:
1 | s equals 0 |
1 | s equals 0 |
首先看如下一段代码:
1 | #include <stdio.h> |
实际打印结果:
1 | s equals 0 |
1 | s equals 0 |
1:/dev/null就是一个黑洞,不想要的东西重定向它即可
举例:find ./ -name “xyz” 2> /dev/null
解释:这样标准错误信息将被放入黑洞消失
2:/dev/zero有类似memset的功能,填充0×00(不是指ACII的’0′)
举例:dd if=/dev/zero of=xyz bs=1M count=10
解释:新建一个10M大小的空文件(填充的是0×00,可用hexdump命令查看)
背景:
安装ubuntu0804,第一个分区是swap分区(/dev/sda1),第二个分区是”boot”分区(dev/sda2),第三个分区是跟目录”/”分区(/dev/sda3)
如果”boot”分区和”/”分区在同一个分区,请根据自身实际情况进行修改
1:grub的三个主要引导文件
(1)/boot/grub/stage1与mbr一样也是512bytes大小,前446bytes也与mbr相同,
即stage1文件是bootloader本地备份,但stage1文件446bytes之后64bytes的partition tables是无效的
因为grub在安装mbr的时候会根据实际分区情况来填写mbr中的partition tables
stage1文件的最后两个bytes与mbr一样也是”0x55aa”
我们从最简单的”hello world”开始,新建hello.c文件代码如下:
1 | #include <stdio.h> |
生产可执行文件的命令如下:
1 | gcc hello.c -o hello |
怎么样,很简单吧,但是到底做了些什么呢?分解动作如下:
1 | gcc -E hello.c -o hello.i |
那么预编译做了哪些工作呢?
答:
a:将#define删除并展开所有宏
b:处理预编译指令#if #ifdef #else #endif以及#include
c:删除注释
d:添加调试标示(这部分占.i大部分内容)
1 | #! /usr/bin/env python |
1 | #include <stdio.h> |
ARM编译环境的头文件time.h中,有如下的时间转换接口:
1 | extern time_t mktime(struct tm * /*timeptr*/); |
如果,传入的实参tm不合法的话,mktime会返回-1
但是,实际的代码却没有返回fasle
1 | if(-1 == mktime(&result)) |
原来,此时time_t的类型定义是 typedef unsigned int time_t;(不同编译环境定义各不相同)
所以,导致获取到的实际返回值是一个极大的正值
1 | (signed int)-1 -> 补码 0xFFFFFFFF -> (unsigned int)4294967295 |
1 | #include <stdio.h> |
1 | " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just |