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

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

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


相关文档:

c获得文件大小

 1.MFC中的方法:(C++)
CFileStatus status;
CFile::GetStatus("D:\\test.txt",status);
long lSizeOfFile;
lSizeOfFile = status.m_size;
lSizeOfFile的值就是D:\\test.txt文件的大小
2.标准C获得文件大小的5种方法
(注意:"__FILE__"指的是当前文件,你可以改为有效路径的目标文件,比如"D:\\test.txt")
#i ......

经典c/c++算法

二分查找的代码.
int bfind(int* a,int len,int val)
{
    int m = len/2;
    int l = 0;
    int r = len;
    while(l!=m && r!= m)
    {
        if(a[m] > val)
  & ......

C/C++笔试面试题目

1.已知strcpy 函数的原型是:
char *strcpy(char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy
答案:
char *strcpy(char *strDest, const char *strSrc)
{
if ( strDest == NULL || strSrc == NULL)
return NULL ;
if ( strDest ......

C与C++风格字符串

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