易截截图软件、单文件、免安装、纯绿色、仅160KB

keil C 出现WARNING:MULTIPLE CALL TO SEGMENT的解析

调试keil程序时有时会出现各种编译警告,一般情况下不会影响程序的运行。但出现如题WARNING:MULTIPLE CALL TO SEGMENT警告时,请留意您的程序是否会发生错误。上述警告指的是你定义的函数体在主程序中被调用,在中断中也被直接或间接的调用了。可想若主程序正运行此函数时,中断来临也运行这段程序的话会发生函数重载现象。若此现象发生且你在程序中未加处理,那么很有可能导致您的程序发生不可预测的结果。结合网上查询的结果和自己的设计提供几个可行的解决方法是:
1. 利用关键字reentrant表明函数可重载
    评注:该法排除了编译器警告和可能出现的重载带来的影响,但此方法在重载发生时,为了保护主程序的程序信息,系统会将程序的信息保存到堆栈中,造成堆栈的而外负担
2. 如果空间多的话,可以定义两个同功能的函数,分别在中断和中断外调用
    评注:该方法操作起来方便,不会出现上一个办法的弊端,但比较浪费code
3. 利用函数指针
    评注:该方法适合用在确定中断和主程序不会同时调用该函数的时候。它不仅排除了编译器警告,在code占用、操作方面都比较好


相关文档:

c指针详解

 第一章 概念
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。
先声明几个指针放着做例子:
例一:
(1)int *ptr;
(2)char ......

C/C++数组名与指针区别深入探索

(1)
数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;
(2)
数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;
(3)
指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着数组的存放地址
(4)
数组名作为函数形参时,在函数体内,其失去了本身的内涵 ......

如何理解C和C++的复杂类型声明


    曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。
  我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的&ld ......

弄了半夜就没想明白,掉进C陷阱了,555

 
//输入一个数组,再修改这个数组所有元素,如何实现?
int main()
{
 vector<int> a;
 int i(0);
 while(cin>>i)
  a.push_back(i);
 //////////////////////////////////////////////////////输出建立的数组:
 cout << "得到的数组为:" << ......

C与C++风格字符串

C风格字符串:对字符串进行操作的 C 函数定义在头文件<cstring>中;
     1. 字符串定义:char* result;
     2. 字符串的最后一个字符是null字符('\0'),可以通过这个字符确定字符串的结尾。
     3. strlen()返回的是字符串的大小;因此, ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号