首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言 | C++可重入函数

1 前言 最近在公司维护项目中碰到一个解决了定位很久 bug , bug 找到时候发现犯了很低级错误——在中断处理函数中调用了 printf 函数,因为中断处理函数调用了不可重入函数,导致中断丢失和系统位置错误...可重入函数主要用于多任务环境中,一个可重入函数简单来说就是可以被中断函数,也就是说,可以在这个函数执行任何时刻中断它,转入 OS 调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入函数由于使用了一些系统资源...满足下列条件函数多数是不可重入函数体内使用了静态(static)数据结构; 函数体内调用了 malloc() 或者 free() 函数函数体内调用了标准 I/O 函数; A....=*lpcY;     lpcY=cTemp;   ///< 访问了全局变量 } C....完成交互记得打开中断,在有些系列上,这叫做“进入/退出核心”或者 OS_ENTER_KERNAL/OS_EXIT_KERNAL 来描述; 不能调用任何不可重入函数; 谨慎使用堆栈。

1.4K88
您找到你想要的搜索结果了吗?
是的
没有找到

C语言seekg函数,C++ seekg函数用法详解

例如,用户可能会要求程序在数据库中搜索某种类型所有记录,当这些记录被找到时,用户又可能希望在数据库中搜索其他类型所有记录。 文件流类提供了许多不同成员函数,可以用来在文件中移动。...其中一个方法如下: seekg(offset, place); 这个输入流类成员函数名字 seekg 由两部分组成。...首先是 seek(寻找)到文件中某个地方,其次是 “g” 表示 “get”,指示函数在输入流上工作,因为要从输入流获取数据。...要查找文件中新位置由两个形参给出:新位置将从由 place 给出起始位置开始,偏移 offset 个字节。...注意,如果目前已经在文件末尾,则在调用此函数之前,必须清除文件末尾标志。

1.1K10

c++ 静态函数_c语言if结构格式

大家好,又见面了,我是你们朋友全栈君 1、对象与对象之间成员变量是相互独立.要想共用数据,则需要使用静态成员或静态方法 2、只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间...(因为静态成员变量在对象创建之前就已经被分配了内存空间) 3、静态成员变量虽然在类中,但它并不是随对象建立而分配空间,也不是随对象撤销而释放(一般成员在对象建立时会分配空间,在对象撤销时会释放).... 6、即可以通过类名来对静态成员变量进行引用,也可以通过对象名来对静态成员变量进行引用. 7、普通成员函数和静态成员函数区别是: 普通成员函数在参数传递时编译器会隐藏地传递一个this指针,通过this...指针来确定调用类产生哪个对象; 但是静态成员函数没有this指针,不知道应该访问哪个对象中数据;所以在程序中不可以静态成员函数访问类中普通变量....static int ChangePrice(int price); //声明静态成员函数用来更改价格 private: int m_size; //声明一个私有成员变量 static

74720

C语言C++)中:详解floor函数、ceil函数和round函数

参考链接: C++ ceil() C语言中  1.floor函数  功能:把一个小数向下取整       即就是如果数是2.2 ,那向下取整结果就为2.000000 原型:double floor(doube...> 示例  floor函数计算后结果为double类型:  #include #include #include int main() {    ...返回值:     成功:返回一个double类型数,此数默认有6位小数     无失败返回值 头文件:#include 示例  ceil函数计算结果为double类型:  #include...参数解释:         x:是需要计算数 头文件:#include 示例  round函数计算结果为double类型:  #include #include<...f\n", j);     printf("The round of -2.7 is %f\n", y);     system("pause");     return 0; } 运行结果:    C+

2.4K20

浅谈C++回调函数实现

所以,C++回调函数也并非高大上技术,它原理无非就是函数指针或者对象传递。本文就从函数指针开始对回调函数进行说明。...函数指针在CC++中被经常使用,使用方式也很简单,具体如下面代码所示: typedef int (*Ptr)(int,int); int add(int a,int b){ return (a...实现是不是很简单,通过回调函数,可以让用户自己定义自己业务实现,且这种方式在网络通讯中被经常使用,下面在看看一下如果回调函数是类成员函数时候如何实现。...3 C++风格回调函数C++中,如果回调函数是类成员函数,需要将回调函数定义成为静态。当然也可以使用全局函数,但是这样做就会破坏C++封装性。...在前面的代码中,都是使用函数指针方式进行,下面的代码使用多态方式实现,为了演示实现方式,代码比较简单。

1.9K10

c++ format 函数包含_C语言函数之strftime()详解

参考链接: C++ strftime() 原函数:  size_t strftime(char *str, size_t maxsize, const char *format, const struct...tm *timeptr)  参数  str -- 是C字符串复制到目标数组指针。...maxsize -- 是给 str 要复制字符最大数目。format -- 是C字符串,其中包含常规字符和特殊格式说明符任意组合。  ...格式说明符是函数相应值代替 tm 中指定时间来表示,格式说明符:  timeptr -- 是为tm结构指针,包含一个日历时间分解成其组成部分,如下图所示:  struct tm {   int tm_sec...tm_yday; /* day in the year, range 0 to 365 */   int tm_isdst; /* daylight saving time */   };  返回值  如果C字符串适合大小字符

1K00

c语言qsort函数模拟实现

模拟实现qsort函数 关于qsort函数预备知识 回调函数 函数指针类型解析 qsort函数用法及相关参数 冒泡排序算法 模拟实现方法介绍 源代码 关于qsort函数预备知识 回调函数 回调函数就是...回调函数不是由该函数实现方直接调用,而是在特定事件或条件发生时由另外一方调用,用于对该事件或条件进行响应。...; (4) 第三个参数是一个函数指针,指向compar函数能比较两个元素,这个函数是要我们自己实现; 我们可以观察到compar函数返回类型是int,参数类型是const void*。...我们可以两层for循环来实现冒泡排序。切记外层len次,内层len-i次循环。 模拟实现方法介绍 那么既然明白了冒泡排序算法,那如何改进成类似qsort函数呢?...函数中每次交换一个字节,交换width次,便是交换了一个元素,一个for循环便可实现

4810

c语言strlen函数模拟实现

1.strlen函数介绍 strlen功能: 函数返回字符串str 长度( 即空值结束符之前字符数目)。...这里空值结束符号就是 ‘\0’ 在c语言中,字符串末尾通常会自动添加 ‘\0’ 作为结束标志 eg: 如果是char str[] = {‘a’,‘b’,‘c’,‘d’,‘e’};则不会添加 ‘...这是因为strlen()函数不统计’\0’ ,而sizeof统计’\0’ (因为统计是整个数组大小) 在监视窗口里我们也可以证实‘\0’存在: 下面是strlen()函数官方解释: 2....strlen()函数模拟实现 (1)循环计数法 我们在了解了strlen()函数功能后,很容易想到利用 指针传递字符串地址,然后判断是否 == ‘\0’操作来进行计数,代码如下: #define... #include #include //strlen函数模拟 //字符串长度等于字符串开始和结束空字符之间字符数(不包括结束空字符本身

7110

匿名函数定义函数_c语言最先执行函数

1.基础概念:定义函数方式 一般定义函数有两种方式: 函数声明 函数表达式 1.1函数声明 如下方法 add 就是函数声明代码结构: function add(x,y){...上面的函数表达式中创建,实际上是创建一个匿名函数,并将匿名函数赋值给变量 add, add 来进行函数调用,调用方式就是在变量 add 后面加上一对括号(),如果有参数传入的话就是 add(1,2...:(1) 所以上面代码要是想要得到想要弹窗提示,就必须要实现赋值,如 a = function(){ alert('测试是否弹窗') }() // 弹窗提示成功 "a=" 这个片段告诉了编译器这个是一个函数表达式...{ /* code */ })() // 但是这个也是可以 // 由于括弧()和JS&&,异或,逗号等操作符是在函数表达式和函数声明上消除歧义 // 所以一旦解析器知道其中一个已经是表达式了...(); -function () { /* code */ } (); +function () { /* code */ } (); // 还有一个情况,使用new关键字,也可以

97320

C++C 语言C++ 语言关系 ( C 语言发展 | C 语言缺陷 | C 语言 + 面向对象 + 高级语言特性 | C++ 语言增加内容 | C 语言C++ 语言应用场景 )

语言 , 如 : Objective-C , 主要用于 Mac 软件和 iPhone / iPad 软件开发 ; C++ , 用途广泛 , Windows / Linux 都可以使用 C++ 语言 ;...2、C 语言C++ 语言关系 C 语言C++ 语言 并 不是 竞争关系 ; C++ 语言 是 以 C 语言为基础 加强版本编程语言 , 可以看作是更好 C 语言 , 在 C++ 语言...中 , 可以使用 C 语言语法 , 对 C 语言完全兼容 ; C++ 语言 包含 C 语言 , 在 C++ 代码中可以使用 C 语言语法 , 但是在 C 语言中不能使用 C++ 语法 ; 3、C++...语言增加内容 C++ 语言C 语言基础上 : 增加了 面向对象 支持 ; 进行了 类型加强 ; 进行了 函数加强 ; 增加了 异常处理机制 ; 增加了 STL 特性 ; 4、C 语言C++...语言应用场景 C 语言C++ 语言应用场景 : C语言 应用场景 : 系统软件、操作系统、编译器等 底层系统级应用 ; C++ 语言 应用场景 : 大型应用程序、游戏 等更 高级应用 ; 在不同

22220

C语言简单实现冒泡函数

冒泡排序(Bubble Sort)是一种计算机科学领域较简单排序算法。它基本思想是通过重复遍历待排序数据集,并依次比较相邻两个数据项,如果它们顺序错误则进行交换。...这个过程会持续重复直到所有相邻数据项都已经交换完毕,此时说明该数据集已经排好序。...冒泡排序名称来源于排序过程中,较小数据项会被逐渐“浮”到数组顶部,这个过程就像碳酸饮料中二氧化碳气泡最终会上浮到顶部现象一样。因此,这种排序算法因其这一特性而得名。...冒泡函数核心思想就是:两两相邻元素进行比较。...如下动图演示: 2.冒泡函数代码简单实现 void bubble_sort(int arr[], int sz)//参数接收数组元素个数 {  int i = 0;  for(i=0; i<sz-

12510
领券