<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[王慧勇]]></title><description><![CDATA[积累，梳理]]></description><link>https://blog.csdn.net/why19911024</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; why19911024]]></copyright><item><title><![CDATA[从 Atom 到 VS code 文本编辑器使用心得 Visual Studio code 怎么用]]></title><link>https://blog.csdn.net/why19911024/article/details/100710269</link><guid>https://blog.csdn.net/why19911024/article/details/100710269</guid><author>why19911024</author><pubDate>Tue, 10 Sep 2019 19:51:08 +0800</pubDate><description><![CDATA[介绍和概述
最近尝试用了用 VS code, 写个使用心得. 网上很多同 Atom 横向对比的文章好像都偏向于 VS code 比较好用.
VS code 感觉就是微软在收购 GitHub 之后，对后者的 Atom 所做的进一步的集成和优化，增加的易用性的同时，违背了 Atom 任何功能都是扩展件可替换可完全定制的原则，集成更多的常用功能，相应的配置项更加繁杂，优化其插件越多，启动速度越慢的问题，...]]></description><category></category></item><item><title><![CDATA[C 关键字]]></title><link>https://blog.csdn.net/why19911024/article/details/53033574</link><guid>https://blog.csdn.net/why19911024/article/details/53033574</guid><author>why19911024</author><pubDate>Fri, 04 Nov 2016 12:25:55 +0800</pubDate><description><![CDATA[C reserved keywords存储类型说明符 storage-class specifier
  keywords
  meaning  auto
  automatic duration storage-class specifier with no linkage
  extern
  static duration storage-class specifier with either]]></description><category></category></item><item><title><![CDATA[C 扩展关键字]]></title><link>https://blog.csdn.net/why19911024/article/details/53033572</link><guid>https://blog.csdn.net/why19911024/article/details/53033572</guid><author>why19911024</author><pubDate>Fri, 04 Nov 2016 12:25:20 +0800</pubDate><description><![CDATA[gcc 扩展关键字__attribute__
设置函数属性, 变量属性, 数据类型属性等, 向编译器提供更多数据, 帮助编译器执行优化
描述函数属性
使用 addr2line 工具分析源代码, 统计程序的运行状态
void fun()         __attribute__ ((regparm(0)));            //不需要通过任何寄存器来传递参数, 参数只是通过堆栈来传递
voi]]></description><category></category></item><item><title><![CDATA[C 指针]]></title><link>https://blog.csdn.net/why19911024/article/details/53033565</link><guid>https://blog.csdn.net/why19911024/article/details/53033565</guid><author>why19911024</author><pubDate>Fri, 04 Nov 2016 12:24:18 +0800</pubDate><description><![CDATA[1 C 指针
指针的内容是其所指向的地址，间接访问操作符访问的是指针指向的地址，作为左值时，就是那个位置，作为右值时，就是那个位置的值。
&, 取地址运算符, 引用运算符
*, 间接访问运算符, 解引用运算符
不能使用变量指针指向常量的地址, 因为既然通过变量名不能改变变量值, 而通过指针变量也应该是不可以的, 可以通过强制类型转换(const_cast)突破此限制 primer p222
只有一层]]></description><category></category></item><item><title><![CDATA[C 预处理指令]]></title><link>https://blog.csdn.net/why19911024/article/details/53033564</link><guid>https://blog.csdn.net/why19911024/article/details/53033564</guid><author>why19911024</author><pubDate>Fri, 04 Nov 2016 12:23:36 +0800</pubDate><description><![CDATA[1 宏定义 #define #undef1.1 宏定义概述
宏定义指令定义了一个标识符(宏名)及一个字符串, 在源程序中每次遇到该标识符时, 均以定义的字符串替换它(宏替换)
宏名和参数间不能有空格, 标识符和字符串间可有任意空格
字符串中应习惯对宏参数加上括号, 这样使用宏时, 如果实参是表达式，则不易出错
宏替换只作宏名和参数替换，不做计算，不做表达式求解
宏一旦被定义后, 其宏名即可成为其它宏]]></description><category></category></item><item><title><![CDATA[C 函数声明, 函数原型, 函数定义]]></title><link>https://blog.csdn.net/why19911024/article/details/53033563</link><guid>https://blog.csdn.net/why19911024/article/details/53033563</guid><author>why19911024</author><pubDate>Fri, 04 Nov 2016 12:22:49 +0800</pubDate><description><![CDATA[函数声明的发展1 隐式函数声明 implicit function declaration
main 函数和 printf 函数返回值类型为 int, 若不声明, 编译器默认函数返回值为 int 类型
C90标准起，这种写法就步入了被逐步抛弃的过程(尽管当时还没有完全立即废止)
C99废除了隐式函数声明法则(remove implicit function declaration), 省略main(]]></description><category></category></item><item><title><![CDATA[C 函数库及头文件]]></title><link>https://blog.csdn.net/why19911024/article/details/53033557</link><guid>https://blog.csdn.net/why19911024/article/details/53033557</guid><author>why19911024</author><pubDate>Fri, 04 Nov 2016 12:22:01 +0800</pubDate><description><![CDATA[1 函数库
库本质上是一种经过编译的可执行二进制代码，可以被操作系统载入内存执行。
Linux 和 Windows 等不同平台编译环境不同, 函数库不兼容。
1.1 静态库 Static Library
静态是指每个用到该库的应用程序都拥有一份自己的库拷贝
静态库在程序编译时会被连接到目标代码中，可执行程序的体积较大, 程序运行时将不再需要该静态库, 可以删除库文件
静态库生成: 使用 ar (ar]]></description><category></category></item><item><title><![CDATA[C 函数的可变参数列表]]></title><link>https://blog.csdn.net/why19911024/article/details/53033554</link><guid>https://blog.csdn.net/why19911024/article/details/53033554</guid><author>why19911024</author><pubDate>Fri, 04 Nov 2016 12:20:51 +0800</pubDate><description><![CDATA[函数参数传递方式GCC 编译器在汇编过程中，调用 C 语言函数时，传递参数有两种方法：
通过寄存器(默认)
通过堆栈(使用 asmlinkage 宏)
可变参数列表必须保存在栈中#define asmlinkage __attribute__((regparm(0)))
asmlinkage int printk(const char *fmt, ...)
告诉 GCC 编译器该函数使用0个寄存器参]]></description><category></category></item><item><title><![CDATA[C 语言基本概念]]></title><link>https://blog.csdn.net/why19911024/article/details/53033460</link><guid>https://blog.csdn.net/why19911024/article/details/53033460</guid><author>why19911024</author><pubDate>Fri, 04 Nov 2016 11:59:24 +0800</pubDate><description><![CDATA[概述
for 循环和 while 循环本质上是等价的
通过地址找到一个值, 通过类型解释一个值, 这就是为什么数组名的地址同数组的第一个元素的地址, 但使用 sizeof 和 & 访问到的则是整个数组的长度和地址
类对象是基于结构的 c++ primer plus 7.8 p236
C 标准
C89
C95
C99
C11
常量
const 修饰的常变量, 本质上仍旧是变量, 字面值才是真正的常量,]]></description><category></category></item><item><title><![CDATA[C 程序文件]]></title><link>https://blog.csdn.net/why19911024/article/details/53033451</link><guid>https://blog.csdn.net/why19911024/article/details/53033451</guid><author>why19911024</author><pubDate>Fri, 04 Nov 2016 11:57:38 +0800</pubDate><description><![CDATA[elf(exective linked file)elf 格式文件是一种为 Linux 系统所采用的通用文件格式, 支持动态链接和重定位, 有很大的文件头flatflat 格式文件是扁平格式的文件, 对文件头和一些段信息做了简化, 可执行程序小, 适于嵌入式系统文件格式转换elf2flt 就是将 elf 格式转换为 flt 格式, 在编译器链接的时候可使用 “-elf2flt” 选项直接编译出 fl]]></description><category></category></item><item><title><![CDATA[内存中堆和栈]]></title><link>https://blog.csdn.net/why19911024/article/details/53033437</link><guid>https://blog.csdn.net/why19911024/article/details/53033437</guid><author>why19911024</author><pubDate>Fri, 04 Nov 2016 11:55:15 +0800</pubDate><description><![CDATA[栈
栈是机器系统提供的数据结构, 现代计算机(串行执行机制)都直接在代码底层支持栈的数据结构, 有专门的寄存器指向栈所在的地址, 有专门的机器指令完成数据入栈出栈的操作
栈的特点是效率高, 支持的数据类型有限, 一般是整数, 指针, 浮点数等系统直接支持的数据类型, 并不直接支持其他的数据结构
子程序的调用就是直接利用栈完成的, 机器的 call 指令里隐含了把返回地址压入栈, 然后跳转至子程序地址]]></description><category></category></item><item><title><![CDATA[C 程序的内存空间布局]]></title><link>https://blog.csdn.net/why19911024/article/details/53033426</link><guid>https://blog.csdn.net/why19911024/article/details/53033426</guid><author>why19911024</author><pubDate>Fri, 04 Nov 2016 11:54:20 +0800</pubDate><description><![CDATA[C 程序的内存空间布局表格中, 从上到下为高地址到低地址方向
  segment
  含义  argument and environment
  命令行参数和环境变量(环境表和环境字符串)
  stack
  栈
  heap
  堆
  bss
  未初始化数据段
  data
  初始化数据段
  text
  正文段
1. 自由存储区: C++中, 堆是由 new 和 delete 管理的,]]></description><category></category></item><item><title><![CDATA[atom 编辑器使用 gbk 编码查找替换显示乱码及查找不到头文件等问题]]></title><link>https://blog.csdn.net/why19911024/article/details/52241649</link><guid>https://blog.csdn.net/why19911024/article/details/52241649</guid><author>why19911024</author><pubDate>Thu, 18 Aug 2016 15:48:35 +0800</pubDate><description><![CDATA[1. 乱码gbk 和 utf8 相互转换会出现锟斤拷乱码2. 查找替换乱码查找面板中，只支持 utf8 编码，gbk 编码的中文注释会显示乱码3. 查找不到头文件中的标识符、使用在项目中查找时，头文件中的标识符找不到，utf8 则没问题]]></description><category></category></item><item><title><![CDATA[stdarg(3) variable argument lists 可变参数列表]]></title><link>https://blog.csdn.net/why19911024/article/details/51920104</link><guid>https://blog.csdn.net/why19911024/article/details/51920104</guid><author>why19911024</author><pubDate>Fri, 15 Jul 2016 18:18:12 +0800</pubDate><description><![CDATA[1. 可变参数列表的实现GCC 编译器在汇编过程中，调用 C 语言函数传递参数有两种方法：
通过堆栈
通过寄存器(默认)
若想通过堆栈传递参数，需在定义 C 函数时在函数前加上宏 asmlinkageasmlinkage int printk(const char *fmt, ...)正常来讲，函数原型中具有确定的参数类型和数量，保证了函数调用的准确性。如果在调用函数时，使用不同类型的不同数量的参数]]></description><category></category></item><item><title><![CDATA[UNIX 时间和日期例程]]></title><link>https://blog.csdn.net/why19911024/article/details/51870019</link><guid>https://blog.csdn.net/why19911024/article/details/51870019</guid><author>why19911024</author><pubDate>Sun, 10 Jul 2016 08:49:24 +0800</pubDate><description><![CDATA[1. 时间计量系统时间计量系统有：世界时(UT)，国际原子时(TAI)，格林尼治标准时(GMT)，协调世界时(UTC)等等。北京时间比 UTC 时间早8小时UTC时间是1999年1月1日00:00北京时间是1999年1月1日08:002. UNIX 系统时间值UNIX 系统使用2种不同的时间值1. 日历时间
以协调世界时(UTC, Coordinated Universal Time)计量
绝对时间]]></description><category></category></item><item><title><![CDATA[Firewall 防火墙基础]]></title><link>https://blog.csdn.net/why19911024/article/details/51840111</link><guid>https://blog.csdn.net/why19911024/article/details/51840111</guid><author>why19911024</author><pubDate>Wed, 06 Jul 2016 16:15:33 +0800</pubDate><description><![CDATA[防火墙技术防火墙是用于阻止计算机之间直接通信，位于两个或多个网络间，实施网络之间访问控制的组件集合。
  技术
  协议栈
  判据
  检测内容
  逻辑位置
  物理位置
  代表  静态包过滤
  网络层
  访问控制表
  源地址, 目的地址
  网络边界
  负责内外网络转换的网关, 个人计算机
  已退出市场
  动态包过滤
  网络层, 传输层
  访问控制表
  端口号, 协议状态]]></description><category></category></item><item><title><![CDATA[在 Atom 编辑器中使用代码段 snippets 编写 Markdown 文本]]></title><link>https://blog.csdn.net/why19911024/article/details/51839454</link><guid>https://blog.csdn.net/why19911024/article/details/51839454</guid><author>why19911024</author><pubDate>Wed, 06 Jul 2016 15:43:09 +0800</pubDate><description><![CDATA[1. 截图2. 代码段1. 查看当前可用的代码段 snippetsalt-shift-S2. 默认快捷键配置'atom-text-editor:not([mini])':
  'alt-shift-S': 'snippets:available'3. 代码段汇总按下快捷键后，按 tab 键，即可显示出代码段效果
  按键
  功能
  含义  b
  bond text
  粗体
  img
  e]]></description><category></category></item><item><title><![CDATA[Xshell 配置方案]]></title><link>https://blog.csdn.net/why19911024/article/details/51830665</link><guid>https://blog.csdn.net/why19911024/article/details/51830665</guid><author>why19911024</author><pubDate>Tue, 05 Jul 2016 13:09:20 +0800</pubDate><description><![CDATA[1. 使用串口登录远程主机
确保串口线连接正确，在windows 下使用 devmgmt.msc 命令打开设备管理器，查看正确连接的串口号
协议选择 SERIAL
输入正确的串口号和合适的波特率
2. 使用 SSH 协议登录远程主机
选择 SSH 协议
输入主机 IP 地址
端口号设置为22
使用 ssh 命令登录
3. 配色方案ANSI Colors
第1行为常规文本，第2行为粗体文本
第2行比第]]></description><category></category></item><item><title><![CDATA[errno(3) 线程局部变量]]></title><link>https://blog.csdn.net/why19911024/article/details/51820357</link><guid>https://blog.csdn.net/why19911024/article/details/51820357</guid><author>why19911024</author><pubDate>Mon, 04 Jul 2016 13:45:09 +0800</pubDate><description><![CDATA[注意 NOTEA common mistake is to do一个常见的错误是像下面这样if (somecall() == -1) 
{
    printf("somecall() failed\n");
    if (errno == ...) { ... }
}where errno no longer needs to have the value it had upon return]]></description><category></category></item><item><title><![CDATA[grep(1) 正则表达式文本查找工具]]></title><link>https://blog.csdn.net/why19911024/article/details/51819728</link><guid>https://blog.csdn.net/why19911024/article/details/51819728</guid><author>why19911024</author><pubDate>Mon, 04 Jul 2016 11:33:35 +0800</pubDate><description><![CDATA[匹配器就是查找文本所用的正则表达式的种类。好比用 google 搜索还是用 baidu 搜索。
匹配控制就是匹配的规则，如何匹配。匹配哪个或哪些样式，匹配样式来自输入还是来自文件，匹配样式是否忽略大小写，获取满足匹配的文本还是获取不满足匹配的文本，按单词匹配或者按行匹配。
正常情况下，输出打印的是满足选项和样式的行。但是，我们有时候不需要显示每个行，或者满足条件的行太多，我们只需要统计满足的行数即可。]]></description><category></category></item></channel></rss>