摘要:编译 GCC编译的几个步骤 【消除unused错误】https://blog.csdn.net/cfqcfqcfqcfqcfq/article/details/54382282 gcc产生类型转换告警 枚举之后define 变量(指针) 二级指针(二) 操作符 语句 函数 printf 函数 关键字
阅读全文
摘要:打印带颜色的输出 控制字符的通用格式如下: Esc[{attr1};...;{attrn}m 其中: Esc 是转义字符, 其值为"\033"; [ 是常量的左中括号; {attr1};...{attrn} 是若干属性, 通常是由一个有特定意义的数字代替, 每个属性之间用分号分隔; m 就是字面常量
阅读全文
摘要:经常会看到类似下边的code写法,觉得这么写没什么意义。 尝试下边代码,发现AA的值被改掉了,没报错,上边的写法能预防这种问题。 更深层次的东西应该涉及到预处理顺序,另外我认为 #define AA AA这种写法应该有种快捷方式:)
阅读全文
摘要:参考资料: https://stackoverflow.com/questions/18496282/why-do-i-get-a-label-can-only-be-part-of-a-statement-and-a-declaration-is-not-a 问题背景: 写了一段code,如下:
阅读全文
摘要:问题背景: 看 https://www.cnblogs.com/sinaxyz/p/4525208.html 这个篇blog时候,发现在应用层代码中,函数 int open_netlink() 中,有这么一句: 通过查询,发现: 解决方案: 随便写的demo示例,隐式类型转换时候不报warning,
阅读全文
摘要:参考资料: https://blog.csdn.net/czg13548930186/article/details/78331692 一个C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)、和连接(linking)才能变成可执行文件。
阅读全文
摘要:#include #include int main() { int i; int ret; struct in6_addr addr6; unsigned long ul1, ul2, ul3, ul0; char str[INET6_ADDRSTRLEN] = {0}; ret = inet_pton(AF_INET6, "ff02...
阅读全文
摘要:参考资料: http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html
阅读全文
摘要:下边这段code,可以发现: 1.指针之间赋值时候,不会触发段错误,会给指针赋成NULL 2.实际访问时候才会导致段错误
阅读全文
摘要:隐式类型转换: 执行结果: $00 11 22 fffffff3 注意最后一个数打印结果,其中做了一个隐式类型转换。
阅读全文
摘要:$ ./a.out -46431549517474037724$ ./a.out -46414111950252277724如上所示,每次执行的数值不一致。需要理解,强制类型转换实际是进行了什么动作。 是因为此时没有进行强制类型转换,而且同样不会发生隐式类型转换。 #if 0 TODO : 添加汇编
阅读全文
摘要:#error 编译到此处时,会保存,导致中断编译 $ gcc test.c test.c:5:2: error: #error can not come here #error can not come here 参考文档: https://github.com/kokke/tiny-AES-c
阅读全文
摘要:写了一个简单的code,gcc -S test.c 因为C不会对数组长度进行检测,所采取的方法就是插入一个金丝雀值,数组操作结束之后,看这个金丝雀值是否变化,变化了则调用 __stack_chk_fail,abort这个进程。 数组越界写入,导致 canary值被修改。在函数退出时检查canary,
阅读全文
摘要:$ ./a.out 0.500000 说明是先(float)1 然后在除 2;
阅读全文
摘要:判断字节序大小端code 上述code输出数值为: $ ./a.out 0x25920x25920000 方便理解。 除了 uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(ui
阅读全文
摘要:记录一次比较容易引起混淆的地方。 如上图所示,打印出来的为乱码。 直接说结论: 此处打印的是str函数的地址,不是"nihao",这个变量的地址,想要打印出"nihao",应该用 str()。 下边又长又屎的分析可以不看,自己犯的迷糊。 第一反应,字符串 ”nihao“ 是局部变量,从str中返回之
阅读全文
摘要:指针有两个要素组成:地址、数据类型。 地址是一个(unsigned long)的数据,表示数据在内存中的位置;数据类型表示要如何解析这个数据。 指向的地址不同,这个指针就是不同的,这点比较容易理解; 需要注意的是当数据类型不同时,这个指针也是不同的,这点催生出了指针的好多有趣的用法。 1.指向同一地
阅读全文