C语言中的不可重入代码段(C语言中的不可重入函数)

本文告诉你C语言中的不可重入代码段,以及C语言中不可重入函数对应的知识点。希望对你有帮助,也别忘了收藏这个站点。

这篇文章的列表: 1、C语言常见面试问题 2.单片机C语言设计中提到的重入函数是什么?和不可重入函数有什么区别? 3.什么是可重入程序?举一个可重入程序的例子。 4.C语言的重入函数是什么?怎么用? c语言常见面试问题 C语言面试常见问题

预处理器(预处理器)

1.用预处理指令#define声明一个常量,以显示一年中有多少秒(忽略闰年问题)。

#定义秒/年(60 * 60 * 24 * 365)UL

我想看看这里的一些东西:

1)关于# define语法的基本知识(例如,不能以分号结尾,括号的使用等。)

2)知道预处理器会为你计算常量表达式的值,所以直接写你是如何计算一年中的秒数的,而不是计算实际值,这样更清楚,也更无成本。

3)认识到这个表达式会溢出16位机器的整数——所以用长整数符号L告诉编译器这个常数是长整数。

4)如果你在表达式中使用UL(无符号长整型),你有一个很好的起点。记住,第一印象很重要。

2.编写一个“标准”宏MIN,它输入两个参数并返回较小的一个。

#定义MIN(A,B) ((A) = (B)?(A) : (B))

该测试旨在实现以下目的:

1)识别宏中#define应用的基本知识。这一点非常重要。因为在内联操作符成为标准C的一部分之前,宏是方便生成嵌入式代码的唯一途径。对于嵌入式系统,为了达到所需的性能,嵌入式代码往往是一种必要的方法。

2)三条件运算符的知识。这个运算符之所以存在于C语言中,是因为它使编译器能够生成比if-then-else更优化的代码。理解这种用法很重要。

3)知道如何在宏中小心地将参数括在括号中。

4)我也用这个问题来讨论宏的副作用,比如:你写下面这段代码会怎么样?

least = MIN(*p,b);

3.预处理程序标识#error的目的是什么?

如果不知道答案,请参考参考文献1。这个问题对于区分正常哥们和书呆子很有用。只有书呆子才会去读一本C语言教科书的附录,去寻找这样一个问题的答案。当然,如果你找的不是书呆子,那么候选人最好希望他不知道答案。

无限循环(无限循环)

4.无限循环经常在嵌入式系统中使用。用C语言怎么写无限循环?

这个问题有几种解决方法。我的第一选择是:

while(1)

{

}

一些程序员更喜欢下面的方案:

for(;;)

{

}

这个实现让我很尴尬,因为这个语法并没有准确地表达出正在发生的事情。如果一个候选人把这作为一个计划,我会以此为契机,探索他们这样做的基本原则。如果他们的基本回答是:“有人教我这么做,但我从没想过为什么。”这会给我留下不好的印象。

第三种方案是使用goto。

循环:

...

转到循环;

如果考生给出了上述方案,说明他要么是汇编语言程序员(这可能是好事),要么是想进入新领域的BASIC/FORTRAN程序员。

数据声明(数据声明)

5.使用变量A给出以下定义

a)整数。

b)指向整数的指针。

c)指向一个整数的指针(指针指向一个整数的指针)r) r。

d)10个整数的数组。

e)一个有10个指向整数的指针的数组。(10个指向整数的指针的数组)

f)指向10个整数的数组的指针。

g)指向有整数参数并返回整数的函数的指针(指向以整数为自变量并返回整数的函数的指针)。

h)一个有10个指针的数组,指向一个函数,该函数有一个整数参数并返回一个整数(一个有10个指针的数组,指向接受一个整数参数并返回一个整数的函数)。

答案是:

a)int a;//整数

b)int * a;//指向整数的指针

c)int * * a;//指向整数指针的指针

d)INTA单片机C语言设计中提到的重入函数是什么?和不可重入函数有什么区别? 一、可重入函数

1)什么是可重入?

可重入函数可以被多个任务并发使用,而不用担心数据错误。相反,一个不可重入的函数不能被多个任务共享,除非可以确保该函数的互斥性(要么使用信号量,要么在代码的关键部分禁用中断)。可重入功能可以在任何时候被中断,稍后恢复而不会丢失数据。可重入函数要么使用局部变量,要么在使用全局变量时保护它们的数据。

2)可重入功能:

不要为连续的调用保存静态数据。

不要返回指向静态数据的指针;所有数据都由函数的调用者提供。

通过使用本地数据或制作全局数据的本地副本来保护全局数据。

如果必须访问全局变量,记得使用互斥信号量来保护全局变量。

永远不要调用任何不可重入的函数。

3)不可重入函数:

函数中使用了静态变量,无论是全局变量还是局部变量。

函数返回一个静态变量。

函数中调用了不可重入的函数。

函数体使用静态数据结构;

函数体中调用Malloc()或free()函数;

其他标准I/O函数在函数体中被调用。

函数是singleton中的成员函数,使用独立存储的成员变量,不使用线程。

一般来说,如果一个函数在重入条件下使用了不受保护的共享资源,那么它就是不可重入的。

什么是可重入程序?举一个可重入程序的例子。 如果一个程序或子例程可以安全地并行执行,则称为可重入或重入;也就是在子程序运行的时候,可以进入并再次执行。如果一个函数是可重入的,它不能包含静态(全局)非常数数据。不能返回静态(全局)非常数数据的地址。只能处理调用者提供的数据。不能依赖单例模式资源的锁。无法调用不可重入的函数。多个“用户/对象/进程优先级”和多个进程通常会使可重入代码的控制变得复杂。同时,IO代码通常是不可重入的,因为它们依赖于共享和独立的资源,如磁盘。重入是函数式编程语言的关键特征之一。示例在下面的C语言代码中,函数F和函数G都不能重复输入。int g _ var = 1;int f(){ g _ var = g _ var 2;返回g _ var} int g(){ return f()2;}在上面的代码中,f使用了全局变量g_var,所以如果两个线程同时执行它并访问g_var,返回的结果取决于执行时间。因此,F不能重新输入。而g调用f,所以不能重入。稍微修改一下,两个函数都可以重入:int f(int I){ return I 2;} int g(int I){ return f(I)2;}

C语言中的可重入函数是什么?怎么用? 假设一个()函数正在main()中被调用。其间有一个中断,在中断服务程序中要调用一个()。

如果这个a()可以被调用,那么它就是可重入的。

反之,则不能重入。

可重入和不可重入的区别在于这个函数的内容是否会相互冲突...例如,如果()中有一个静态变量...不会的。..

关于C语言中不可重入代码段的介绍,就说到这里吧。感谢您花时间阅读本网站的内容。不要忘记搜索更多关于C语言中不可重入函数和C语言中不可重入代码段的信息。

相关文章

发表新评论