杂碎要点记录

  • 分区读写属性改写,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 [email protected]:/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

你可能感兴趣的:(杂碎要点记录)