核心内容摘要
Navicat连接Oracle报错:ORA-00604: error occurred at recursive SQL level 1ORA-01653: unable to ext...如何解决?
最近在看stm32的中间层LwIP的源码代码对结构类类型定义struct有了一个新的认识记录下来。
另外发现了一个比较好用的vscode插件也记录下来。
1结构体struct类型结构体类型定义。
首先struct类型是因为某些实物的属性比较复杂用某一个简单的类型无法描述但是这些属性都是都是属于某一个实物也是说本身就有在一个范围内的特性。
我们都知道c语言的定义的变量都是定义在内存上内存上的内存空间只有两种一种是相连的另外就是不相连的。
而结构体类型struct定义结构体成员变量本身就是在内存上相连的。
也就是说那一众属性本身属于某一个需要描述的事物对应的结构体类型定义的变量内部的成员变量本在在内存上是相连的。
我们都知道c语言的函数的本质是操作内存变量因为c语言中比较常用的做法是这些内存变量打包成一个struct结构体类型并定义对应结构体类型变量这个结构体类型变量内部的成员在内存上本事就是相邻的我们定义相关函数最常用的办法就是通过结构类指针类型变量去读写访问通过对这些结构体内部成员变量读写不同的数值就实现了需要的功能最直接的就是寄存器寄存器的位段写入需要的数值就能操纵硬件实现不同功能对应的真正结构体内存变量通过写入有效数据就可以在读它的时候进行判断就知道发生了什么事情就可以指导访问其他函数这样功能就实现了。
结构体实现变量打包除了在硬件上像寄存器一样本身就是相连还可以将某些模糊的属性变量进行打包成相邻的结构体内部成员变量。
结构体的发明进一步约束简化了内存变量的布局分部很大程度上简化了代码读写访问的复杂型。
2一个比较实用的vscode插件最近在读LwIP源码的时候遇到一个问题就是条件编译#if #else #end如果代码比较长因为vscode是没有相关条件编译的折叠辅助线功能让我们一目了然条件变量在哪里结束哪里分支了。
我发现一个插件名字叫“IFDEF Pathfinder”安装后能够在条件变量右面有不同颜色的相关提示这样我们就可以通过快速下拉代码找到对应宏定义在哪里结束了。
这样我们就可以比较容易找到条件编译在哪里结束了虽然也没有相关折叠功能好用。