一开始用的是memwatch ,结果现在忘了vs 如何配置编译选项了,学会了使用新的 memleak去检测 。 memleak下载网址 里面会携带exmapl...
用SonarQube进行JAVA语言代码规范的文章在网上不少,但是介绍非JAVA语言(比如C语言)的不多,在这里我们以C语言给大家介绍(Windows环境)。...1 下载C语言代码插件到SonarQube主目录的%SonarQube_HOME%\extensions\plugins目录下。...3 重新登录SonarQube后,在代码规则处会发现C (Community)。 4 进入“质量配置”,在左上角选择“创建”,输入名称,语言选择C(Community)。 ?...6 点击右上方的“批量修改->激活C语言规则”,选择“应用”。 ?...(如果C语言不在本目录下,比如在src下,请把-D"sonar.sources=."改为-D"sonar.sources=.
Shell 脚本主要用于在类 Unix 系统(如 Linux、macOS 等)中完成以下工作: 执行批处理任务:如批量安装软件、生成系统配置等 实现自动化过程:如自动处理大量文本内容、自动备份数据等 管理操作系统...:如监控系统资源、与调度工具(Crontab 等)结合定期执行任务等 虽然 Shell 编程与其他主流编程语言相比而言略显粗陋,但笔者认为编程的核心思想应该是一致的。...本文总结了 20 余条常用编程规范,并推荐一种 Shell 脚本检查工具,帮助大家养成良好的 Shell 编程习惯。...方式实现并发,提升脚本运行效率 建议在 Shell 脚本中采用 cat>> filename > filename 方式逐行写入 检查工具推荐...ShellCheck 能够识别的问题包括但不限于: 语法错误 逻辑漏洞 代码风格问题 潜在的安全风险 2、ShellCheck 使用 方式一:在线检查 ShellCheck 在线服务地址:https:/
C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。...在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码 errno,该错误代码是全局变量,表示在函数调用期间发生了错误。...您可以在 errno.h 头文件中找到各种各样的错误代码。 所以,C 程序员可以通过检查返回值,然后根据返回值决定采取哪种适当的动作。...0 值表示程序中没有错误。 errno、perror() 和 strerror() C 语言提供了 perror() 和 strerror() 函数来显示与 errno 相关的文本消息。...输出错误: No such file or directory 打开文件错误: No such file or directory 被零除的错误 在进行除法运算时,如果不检查除数是否为零,则会导致一个运行时错误
C语言认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示。...2、将字符常量与字符串常量混淆 char a; a=”c”; 例子中混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。...3、忘记加分号 分号是C语句中不可缺少的一部分,语句末尾必须有分号。 x=1 y=2 编译时,编译程序在“x=1”后面没发现分号,就把下一行“y=2”也作为上一行语句的一部分,这就会出现语法错误。...改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。 4、scanf函数输入时忘记加地址运算符“&” int a,b; scanf(“%d%d”,a,b); 这是不合法的。...这种错误尤其需要注意。 6.switch语句中漏写break语句 例如:根据考试成绩的等级打印出百分制数段。
我的环境是ubuntu 使用发行版的自带的源中安装 sudo apt install valgrind 然后运行一下 valgrind + 可执行命令 就可以 检查内存泄漏啦 ?...当程序结束时如果一块动态分配的内存没有被释放且通过程序内的指针变量均无法访问这块内存则会报这个错误。 “indirectly lost”:间接丢失。当使用了含有指针成员的类或结构时可能会报这个错误。...这类错误无需直接修复,他们总是与"definitely lost"一起出现,只要修复"definitely lost"即可。例子可参考我的例程。 “possibly lost”:可能丢失。...当程序结束时如果一块动态分配的内存没有被释放且通过程序内的指针变量均无法访问这块内存的起始地址,但可以访问其中的某一部分数据,则会报这个错误。...可以无视这类错误。这类错误我没能用例程触发,看官方的解释也不太清楚是操作系统处理的还是valgrind,也没有遇到过。所以无视他吧~
提高速度可以使用多进程,但是多进程占用系统资源太多,为了减少占用的资源并提高性能,就该拿起低级工具,将“前盖”打开并对“引擎”进行调整。 这里的低级工具就是C语言/C++。...有些读者应该是不懂C语言/C++的,所以这篇文章我就来讲一下C语言/C++为什么可以作为低级工具,为什么它们速度非常快?...到这里有一个问题,如果我程序结果不对,发现结果的错误是因为一个模块的错误,修改了那个模块,但是对应的pyc文件未修改,正常人会认为结果还是错的,实际上修改模块就能输出正确的结果,不需要把对应的pyc文件删除...看一下import的源码,会发现在import的时候它会对pyc文件和py文件的最后修改日期进行检查,如果发现py文件的修改日期晚于pyc文件的修改日期,就进行重新编译。...C语言/C++是编译性语言 C语言/C++属于典型的编译性语言,而且它们更接近底层,可以直接操控硬件,运行速度当然也是非常快!为了让大家更好的对“引擎”进行调整,懂得低级工具的使用过程是很有必要的!
C语言中,定义时用a[5],表示a数组中有5个元素。其下标是从0开始的,数组中最后一个元素是a[4],不存在a[5]。 7、定义数组时误用变量 ?...即C不允许对数组大小作动态定义。 8、地址运算符&使用错误 ? C中,数组名代表地址 正确的应为: ? 9、同时定义了形参和函数中的局部变量 ? 形参应在函数体外定义,而局部变量应在函数体内定义。
,大体使用上我认为后置++的频率比前置要高 后置++ 先执行表达式 等表达式执行完后 再++ 也就是先使用 后++ 这里面b=a++ 可以拆分成 b=a a=a+1 而来到c的时候...a的值已经加1了 即c=11 b=++a 可以拆分成 a=a+1 b=a 即b=11 这里是先加加 在使用 c=a a的值已经在上面加1了 即c=11 二、static
C语言区分大小写。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。 ? 2.忽略变量类型,进行不合法运算 %是求余运算,得到a/b的整余数。...C语言规定以“\0”作为字符串结束标志,它是系统自动加上的,所以字符常量“b”其实包含两个字符'b' '\0',而把它赋给一个字符变量是不行的。 ?...4.忽略了“=”和“==”的区别 C语言中,“=”是赋值运算符,“==”是关系运算符。在此代码中,前者是进行比较,后者是进行赋值。 ?...5.忘记加分号 几乎在所有编程语言中,都是用“;”代表一句或多句语句的结束。 ? 6.多加分号 ? ? ? 7.忘加地址运算符“&” scanf函数的作用是:按照a在内存中的地址将a的值存进去。...9.输入字符的格式与要求不一致 在用“%c”格式输入字符时,空格字符和转义字符都作为有效字符输入。 ? 如输入:a b c 字符“a”赋值给c1,字符“ ”赋值给c2,“b”赋值给c3。
前言 哈喽,大家好,我是asong; 通常我们在业务项目中会借助使用静态代码检查工具来保证代码质量,通过静态代码检查工具我们可以提前发现一些问题,比如变量未定义、类型不匹配、变量作用域问题、数组下标越界...、内存泄露等问题,工具会按照自己的规则进行问题的严重等级划分,给出不同的标识和提示,静态代码检查助我们尽早的发现问题,Go语言中常用的静态代码检查工具有golang-lint、golint,这些工具中已经制定好了一些规则...,虽然已经可以满足大多数场景,但是有些时候我们会遇到针对特殊场景来做一些定制化规则的需求,所以本文我们一起来学习一下如何自定义linter需求; Go语言中的静态检查是如何实现?...众所周知Go语言是一门编译型语言,编译型语言离不开词法分析、语法分析、语义分析、优化、编译链接几个阶段,学过编译原理的朋友对下面这个图应该很熟悉: 编译器将高级语言翻译成机器语言,会先对源代码做词法分析...,比如括号缺少,语法分析完成后,就需要进行语义分析,在这里检查编译期所有能检查静态语义,后面的过程就是中间代码生成、目标代码生成与优化、链接,这里就不详细描述了,这里主要是想引出抽象语法树(AST),我们的静态代码检查工具就是通过分析抽象语法树
C语言还为多分支选择提供了另一个switch语句,其一般形式为: 开关(表达式){ 案例常量表达式1: 语句1; 案例常量表达式2: 语句2; … 条件常量表达式n: 语句n; 默认值: 语句n...但是在输入3之后,将执行情况3及以后的所有句子c语言 switch语句,并输出星期三及以后的所有单词. 这当然是不希望的. 为什么会这样?这仅反映了switch语句的功能....为避免上述情况,C语言还提供了一个break语句,专用于跳出switch语句. break语句仅具有关键字break,没有参数. 稍后将详细介绍....修改示例程序,在每个case语句之后添加一个break语句c语言 switch语句,以便在每次执行后可以跳出switch语句,以避免输出意外结果....n”); break; default:printf(“error\n”); } return 0; } 使用switch语句时,还应注意以下几点: 大小写之后的每个常量表达式的值不能相同,否则会发生错误
——村上春树 关于 BCC 是什么这里不多介绍,小伙伴可以看我之前的文章:Linux 可观测性 BPF&eBPF 以及 BCC&bpftrace 认知 BCC工具检查清单 下面的内容 位于BCC仓库的docs...它提供了个通用的使用 BCC 工具的检查清单: https://github.com/iovisor/bcc/blob/master/docs/tutorial.md execsnoop execsnoop...──[root@vms100.liruilongs.github.io]-[~] └─$ 存活周期短的进程会消耗CPU资源,但通过传统的周期执行的监控工具较难发现,可使用execsnoop(8)来检查...这允许你磁盘 I/O进行更细致的检查,并搜寻时序模式(比如,写动作之后的读排队)。...本工具可以定位超出预期的CPU等待时间,就原因来说它可能是CPU饱和、配置错误或者是调度问题引起的。
core dump 的一个常见原因是段错误(segmentation fault),这是由尝试访问非法内存位置引起的。这可能包括释放后使用、缓冲区溢出和写入空指针。...在bug很难复现的情况下,core dump 非常有用,它可以让你检查可能发生的情况。GDB 可用于读取 core dump 文件并分析程序崩溃原因。...以 ubuntu 系统为例,Linux 提供了一个名为 ulimit 的程序来设置 core 文件大小和其他参数。...GDB 有助于在程序崩溃时检查栈帧以及变量和寄存器的状态。...实例演示 比如引起段错误的代码如下: // core_dump.c #include #include int main(void) { char
该错误代码只会报告host上发生的,任务开始执行之前的错误----这一般都是参数验证方面的。...所以用户会看到一个奇特的现象:后面无论调用什么都是错的,哪怕检查了代码,后面的行写的看上去都没有问题。用户就会困惑。而此章节,很好的解说了这点。...需要说明的是,因为异步错误发生需要一定的时间, 例如刚才说的kernel,kernel可能执行到100ms后,才会挂,此时可能在kernel启动后很久才能出现错误,例如: >> A B C D...则错误可能在A,B,C,D处都没事。到了很久之后的cudaMemcpy才出现错误。 此时错误就和错误的发生源(实际上的kernel)相隔很远了。需要用户认真往上找才可以。...,因此几乎总能在这些地方暴露出之前的错误。
日志简述 C/CPP的日志工具也很多,在之前的项目中用过的有以下几个:zlog、spdlog、log4cpp等。...zlog之前也介绍过,这个日志工具我在使用的时候遇到过2个问题: 1.多线程输出比较频繁的时候,切换文件时程序会挂掉; 2.有的平台下面,切换文件时,程序挂掉再无法启动,只能手动删除日志文件,或者不让日志输出到文件...这个也挺好用,只需要包含头文件即可,只是这个日志依赖于c++11,有些编译器比较老,不支持,c语言也无法使用。...今天要介绍的这个日志是easylogger,这个是c语言的版本,所以c/c++都可以用,这个日志官方提供的demo和文档比较全,我就不再多说了。...[E]:错误(Error) 2.[W]:警告(Warn) 3.[I]:信息(Info) 4.[D]:调试(Debug) 5.
最近在做系统安全基线检查相关的,网上找了一些脚本以及群友分享的。整理下分享给大家: 首先是Linux的shell加固脚本 #!...del audit.* REM 共享配置 REM 清除admin$共享 net share admin$ /del REM 清除ipc$共享 net share ipc$ /del REM 清除C盘共享...net share c$ /del REM 清除D盘共享 net share d$ /del REM IP协议配置 REM 启用SYN攻击保护 @echo Windows Registry...firewall show rule name=all dir=out type=dynamic status=enabled >>%~dp0\JianCha@1.txt pause 最后在分享两个表格: Linux...安全检查 Windows安全检查
最近要检查网卡流量,其实是有各种现存工具,非常容易实现 但需要把这个东西与icinga2 集成起来搞报警什么的。...如果要集成至nagios/icinga 记得检查 $LOG 这个文件的权限。需要nagios相关用户对此有写权限。
在上一篇笔记中有分享Linux下的vi/vim编辑器的使用方法(【Linux笔记】Vi/Vim编辑器),现在我们就可以使用vi/vim编辑器编写C代码了。那么写完代码该怎么进行编译呢?...关于在Windows命令行下编译C程序的方法可查看往期笔记:【C语言笔记】windows命令行下编译C程序、【C语言笔记】使用notepad++、MinGW来开发C程序。...首先,使用命令gcc -v查看当前的Linux发行版是否有安装gcc编译器(PS:本文使用的Linux发行版是红帽6): ? 使用vi/vim编辑器写代码并保存为hello.c: ?...在Linux下进行C语言编程的学习可能会增加学习的成本,但是从长远来看仍然是有必要的。...若不想安装Linux系统,也想适应一下Linux环境,则可参考往期笔记:【C语言笔记】Windows下体验Linux环境。
大家好,又见面了,我是全栈君 在很多人的眼里,C语言和linux常常是分不开的。这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品。...当然,linux操作系统本身对C语言的支持也是相当到位的。...作为一个真正的程序员来说,如果没有在linux下面用C语言编写过完整的程序,那么只能说他对C语言本身的理解还相关肤浅,对系统本身的认识也不够到位。...如果还没有过Linux编程经验的朋友可以首先在自己的pc上面安装一个虚拟机,然后就可以在shell下面编写自己的C语言代码了。...如果你看到了,那么恭喜你,你已经可以开始linux的c语言编程之旅了。 当然,我们不会满足于这么简单的打印功能。
领取专属 10元无门槛券
手把手带您无忧上云