- 分区读写属性改写,
mount -o remount /oemimage/oemapp -w
。 - 有效位:MSB---加权最大的位;最低有效位:LSB---加权最小的位(可以是位或byte)
- 大端字节序----小地址|大地址; 小端字节序----大地址|小地址
- git log --graph --pretty=oneline --abbrev-commit
- #warning 在编译时产生一个告警信息,但编译继续 #warning "--------cout-----------"
- #error 在编译时产生一个错误信息,并中止编译
- 出现未定义的原因:库引用错误、c++与c互引错误
- -isystem dir 指定头文件搜索路径,该路径的优先级低于-I指定路径,高于系统路径,-isysroot dir this option is like the --sysroot option, but applies only to header files. --sysroot=dir 指定该路径为头文件和库文件的逻辑根目录,(/usr/include=>dir/usr/include; /usr/lib=>dir/usr/lib),if you use both the option and -isysroot option. then the --sysroot option applies to libraries,but the isysroot option applies to header files
- 当函数参数有默认值时,只需要在头文件中申明,定义处不申明
- shared_ptr<>(new xxx), make_shared<>(object);注意两者参数的区别,一个是new出来的指针,一个是对象
- 修改git的url地址 git remote set-url origin git@10.43.105.5:/home/git/projects_repository/cma_dev_repository.git/cma_repository
- 编译动态库时,不会去寻找其引用动态库的定义,只需申明即可(无需加 -l...)。
- 1.0车机进入tbox网络测试页面的方法:点击拨号页面,键盘没开启,就一直点击拨号页面知道键盘启用,然后输入#*20160727 点击tbox #*95279527
- Linux查看文件二进制:xxd -u -a -g -l -c 16 b.img
- 在NASM中, 任何不被方括号[ ]括起来的标签或变量名都被认为是地址, 访问标签中的内容必须使用[ ]。
- $表示当前行被汇编后的地址。$$表示一个节(section)的开始处被汇编后的地址
- gcc -M kernel/start.c -I include 生成依赖关系
- 重复定义,在头文件中包含了 c/cpp源文件
- #define语句中的#是把参数字符串化,##是连接两个参数成为一个整体
- Ubuntu切换到root用户仍然不能修改/etc/sudors文件,需要使用wq!强制修改保存方可。
- Q-dir 中不能显示git的状态图标:注意不要勾选下图中圈出的选项。
-
硬盘分区时,在MBR扇区后存在一片空白区。如下图红色框圈出位置的原因:分区不允许跨柱面,故MBR虽然只有一个扇区的内容,但是需要占用一个柱面。
- 要将一个常量字符串复制到一个动态字符串即库函数
strdup()
,要将其改写为一个用 c++ new 操作符实现的函数:
char *strdupnew(char const *str)
{
return str ? strcpy(new char [strlen(str) + 1], str);
}
两者区别在于前者用 malloc 分配空间,后者用 new 分配空间。
- __builtin_expect() 是 GCC (version >= 2.96)提供给程序员使用的,目的是将“分支转移”的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。
__builtin_expect((x),1) 表示 x 的值为真的可能性更大;----likely(x)
__builtin_expect((x),0) 表示 x 的值为假的可能性更大。----unlikely(x) - format属性告诉编译器,按照 printf, scanf, strftime或strfmon的参数表格式规则对该函数的参数进行检查。“archetype”指定是哪种风格;“string-index”指定传 入函数的第几个参数是格式化字符串;“first-to-check”指定从函数的第几个参数开始按上述规则进行检查。
具体使用格式如下:
__attribute__((format(printf,m,n)))
__attribute__((format(scanf,m,n)))
其中参数m与n的含义为:
m:第几个参数为格式化字符串(format string);
n:参数集合中的第一个,即参数“…”里的第一个参数在函数参数总数排在第几.这里需要注意,有时函数参数里还有“隐身”的,如C++的类成员函数的第一个参数实际上是"隐身"的"this"指针;
extern void myprint(const char *format,...) __attribute__((format(printf,1,2)));
- 在用#define 定义时 , 斜杠("")是用来续行的,
"#"用来把参数转换成字符串,是给参数加上双引号。
"##"则用来连接前后两个参数,把它们变成一个参数,
"#@"是给参数加上单引号。下面的例子会使您很容易理解。
#define CAT(x,y) x##y /* CAT(1,"abc") => "1abc" */
#define TOCHAR(a) #@a /* TOCHAR(1) => '1' */
#define TOSTRING(x) #x /* TOSTRING(1) => "1" */
- 计算字节对齐
#define ROUNDUP(a, size) (((a) & ((size) - 1)) ? (1 + ((a) | ((size) - 1))) : (a))
- 关于coverity告警的一个网站:
https://wiki.sei.cmu.edu/confluence/dosearchsite.action?queryString=call