
C
文章平均质量分 88
私房菜
独乐乐不如众乐乐!!!!
展开
-
C中一些常用小结
1. const1. const它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。// a 代表一个常整型数// a 代表一个常整型数// a 代表一个指向常整型数的指针,即a的值是可变的,但是*a是不能变的,函数的一些形参经常会用到// a 代表一个常指针,即a的值是不可变的,但是*a是可变的// a代表的是一个指向常整型数的常指针1)const + 类型说明const修饰的是类型,想让类型为常量,也就是这个类型的值为常量。例如const int *a。原创 2014-06-10 15:28:07 · 1667 阅读 · 0 评论 -
用图记忆C语言中的运算符优先级
运算符优先级以及结合方向的统计表,网上到处可见。本文画了一张图,以便记忆,喜欢的拿走!其中,取反运算符、逻辑非运算符,都属于单目运算符,优先级高于双目运算符。关系运算符中,>、>=、原创 2023-01-10 14:34:37 · 3190 阅读 · 2 评论 -
C 语言中的一些谜题(二)
下面两个文件中的简单程序,当两个文件同时参与编译能通过吗?结果又是什么?file1.cfile2.c这两个文件编译时可以通过的,但是运行时会出错。原因是在file2.c 中声明 extern int *arr 一个数组并不能得到实际的期望值,因为它们的类型并不匹配,所以导致指针实际并没有指向那个数组。修改:extern int arr[];原创 2023-01-09 21:35:27 · 1299 阅读 · 0 评论 -
C 语言中的一些谜题(一)
提问:这段代码将会输出什么内容?回答:没有任何输出从表面来看 TOTAL_ELEMENTS 得到数组的元素个数,即 7,那么 d 从-1 开始,相当于答应array 数组从第 0 个开始的所有元素。那为什么没有任何输出呢?原创 2023-01-09 20:59:43 · 860 阅读 · 0 评论 -
Linux 中的几种定时器
在linux系统中定时器有分为软定时和硬件定时器。硬件定时器一般指的是CPU的一种底层寄存器,它负责按照固定时间频率产生中断信号,形成信号源。基于硬件提供的信号源,系统就可以按照信号中断来计数,计数在固定频率下对应固定的时间,根据预设的时间参数即可产生定时中断信号,这就是软定时。本文主要整理 Linux 系统开发中常使用的软定时器,而硬件定时器涉及到硬件手册这里略过。本文会在持续更新过程中将常用定时器逐一整理出来。alarm当时间到达__seconds秒后,进程会受到一个SIGALRM的信号。原创 2023-01-05 14:28:22 · 9441 阅读 · 4 评论 -
字符串匹配之--BM算法
所有的好后缀:“MPLE”,“PLE”,“LE”,“E”,只有“E”在“EXAMPL”中出现,所以后移6-0=6位,这个值显然要比用坏字符规则求出的值要大,那我们到底是要移动3还是6呢?2)“S”与“E”不匹配,我们就将“S”称作“坏字符(bad character)”,即不匹配的字符,这时就可以将搜索词直接往后移动几位,这一过程被称作坏字符引起的模式滑动,那么具体应该移动多少位呢?注意,“MPLE”,“PLE”,“LE”,“E”等都是好后缀;当然,如果好后缀在搜索词中没有再次出现,设为-1;...转载 2022-08-11 17:44:35 · 582 阅读 · 0 评论 -
设置线程名的两种方式:prctl和pthread_setname_np
对于长期在linux 中开发的同学,这两个函数应该是非常熟悉的。prctl 的功能十分强大,但对于设置线程名称单独的特性而言,pthread_setname_np 更是灵活些。原创 2021-11-04 16:16:09 · 17732 阅读 · 0 评论 -
C/C++ 中问题小结
1.__cxa_pure_virtual最近开发代码出现coredump,提示__cxa_pure_virtual 调用。从字面意思就可以知道使用了纯虚函数,而实际上有纯虚函数的类是抽象类,是不能实例,更不能调用纯虚函数。出现原因:线程切换的时候, 一个清空了虚函数表,另外一个线程却正要用 构造函数调用虚函数也会出这个问题 垂悬指针也会出现这个现象,父类指针指向子类实例,子...原创 2020-04-07 10:13:45 · 1614 阅读 · 0 评论 -
GDB变量值显示为 optimized_out 的解决方法
最近使用GDB调试的时候,经常遇到GDB查看变量值的时候输出< optimized_out >,Google了一下,找到几个解决方法,来应对不通情况下需要查看具体变量输出的场景。解决方案将GCC优化选项调整为O1或是O0GCC在O2、O3优化选项下会将代码优化的比较多,调试器有可能会找不到变量的信息。通常可以将优化级别降低到O0,完全关闭优化,可以保留所有的变量和代码...转载 2019-12-23 14:43:05 · 21227 阅读 · 1 评论 -
C中时间精确到毫秒
前言:之前一篇博文对 time.h 进行了解读,但是如果需要时间精确到毫秒,time_t、tm还是无法满足的,需要另外一种方式。方法1:timespec和timeval#include <time.h>struct timespec{ __time_t tv_sec; /* Seconds. */ __syscall_slon...原创 2019-10-11 10:34:11 · 10493 阅读 · 5 评论 -
浅谈 C 字符串数组的内存布局
首先感谢秋豪大佬对文章的校对以及耐心的指导 先献上我的膝盖 or2整理了四种常见的使用 C 语言字符串数组的形式分别对这以下几种的内存布局进行分析char* array[] = { "line1", "line10", "line100", "line1000",};char **array = { "line1", "line10...转载 2019-08-27 16:49:11 · 1066 阅读 · 0 评论 -
mxml 详解
前言: 最近项目中需要将用户的配置信息进行保存,考虑到后期出厂这个配置文件可以清晰地动态更改,所以选择使用xml的方式。 xml相关的库有很多,例如libxml2、Tinyxml、RapidXml、MinXml等。 本文使用的是minxml,至于其他库的使用后续会进行补充和比较,敬请期待!下载:https://github.com/michaelrsweet/mxm...原创 2019-08-16 16:16:15 · 11771 阅读 · 0 评论 -
C 语言中 time.h 使用
是C/C++中的日期和时间头文件。用于需要时间方面的函数。原创 2019-06-26 11:47:29 · 8797 阅读 · 1 评论 -
C和C++接口混合使用
__BEGIN_DECLS 和__END_DECLS这一篇说到了宏定义是为了C、C++之间的混合使用,这一篇来看下如何混合使用接口。其实,最根本就是要知道C++因为重载的缘故,在编译的时候需要将函数的参数类型加上用于区分重载函数。所以在编译的时候,函数需要注意是C接口还是C++接口。C++调用C:例如一个C++代码中需要调用C库中的funcA(int x),如果只是简单...原创 2019-06-03 18:54:03 · 648 阅读 · 0 评论 -
__BEGIN_DECLS 和__END_DECLS
在底层代码和库的头文件中经常看到 __BEGIN_DECLS 和 __END_DECLS这两个宏,一直不太理解,今天特意查了一下,才知道它有这么大的用处。我们编写代码,经常需要c和c++混合使用,为了使 C 代码和 C++ 代码保持互相兼容的过程调用接口,需要在 C++ 代码里加上 extern “C” 作为符号声明的一部分,为了简化,从而定义了上面的两个宏方便我们使用。原创 2019-03-19 14:23:39 · 6067 阅读 · 0 评论 -
C语言的静态库与共享库
1、库的概念函数库是由系统建立的且有一定功能的函数集合。库中存放函数的名称和对应的目标代码,以及连接过程中所需的重定位信息,但是库中对应的函数的源代码一般是不可见的,而对应的头文件中可以看到它的对外接口(函数原型)。Linux中标准的C函数库放置在/usr/lib下,以文件形式存放。用户也可以根据自己的所需建立自己的用户函数库。函数库分为静态库(.a)和共享库(.so,ShareObj),共...转载 2019-03-18 19:34:17 · 813 阅读 · 0 评论 -
深入理解驱动开发中的机制与策略
机制mechanism,策略policy。如果你看过《linux device drivers》,里面给出了大概的介绍。机制提供了干什么(do what),策略提供如何做(how to do)。驱动程序完成机制的功能,把策略的实现留给用户的应用程序。通常在机制中,驱动程序要完成打开,关闭,读写,控制等功能。这些都是设备使用时最基本的操作。而策略中就要实现一些高级的数据处理或界面功能。通过例转载 2018-01-17 15:14:57 · 981 阅读 · 0 评论 -
函数参数中带省略号的用法
前言: 本文在很大程度上改编自网友kevintz的“C语言中可变参数的用法”一文,在行文之前先向这位前辈表示真诚的敬意和感谢。 一、什么是可变参数 我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型转载 2015-11-05 10:24:33 · 2063 阅读 · 0 评论 -
sprintf 实例
文章出处:http://blog.youkuaiyun.com/shift_wwx请转载的朋友标明出处~~sprintf 在填充buffer 的时候,可能需要将buffer 一并的打印出来,一般情况sprintf 之后加个log 就可以了,但是碰到很多应用sprintf的地方就很累了,可以包装起来。#define SQL_DEBUG 0#define getSqlParams(func,原创 2015-11-05 10:53:03 · 1263 阅读 · 0 评论