首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

写的一个C语言抛出错误的代码:头文件出了有关问题,找了几次,没有解决,现向高手请问

2012-03-28 
写的一个C语言抛出异常的代码:头文件出了问题,找了几次,没有解决,现向高手请教代码如下:接口(里面含有大量

写的一个C语言抛出异常的代码:头文件出了问题,找了几次,没有解决,现向高手请教
代码如下:
接口(里面含有大量预处理内容):
#ifndef   EXCEPT_INCLUDED
#define   EXCEPT_INCLUDED
#include   <setjmp.h>

                #define   T   Except_T
                typedef   struct   T
                {
                                char   *reason;
                }   T;

                typedef   struct   Except_Frame   Except_Frame;
                struct   Except_Frame
                {
                                Except_Frame   *prev;
                                jmp_buf   env;
                                const   char   *file;
                                int   line;
                                const   T   *exception;
                };


                enum
                {
                                Except_entered   =   0,  
Except_raised,  
Except_handled,
                                Except_finalized
                };

                #ifdef   WIN32
                                __declspec(thread)
                #endif


                extern   Except_Frame   *Except_stack;
                extern   const   Except_T   Assert_Failed;


                void   Except_raise(const   T   *e,   const   char   *file,   int   line);


                #define   RAISE(e)   Except_raise(   &(e),     __FILE__,     __LINE__   )
#define   RERAISE   Except_raise(   Except_frame.exception,\
Except_frame.file,   Except_frame.line   )


                #define   RETURN\
switch   (   Except_stack   =   Except_stack-> prev,   0   )\
default:\
return
#define   TRY\
do\  
{\
volatile   int   Except_flag;\
Except_Frame   Except_frame;\


Except_frame.prev   =   Except_stack;\
Except_stack   =   &Except_frame;\
Except_flag   =   setjmp(Except_frame.env);\
if   (Except_flag   ==   Except_entered)\
{\
#defineEXCEPT(e)\
          if   (Except_flag   ==   Except_entered)         \  
Except_stack   =Except_stack> prev;\
}                       \
else   if   (Except_frame.exception   ==   &(e))\
{\
Except_flag   =   Except_handled;\
#define   ELSE\
          if   (Except_flag   ==   Except_entered)         \
                Except_stack   =   Except_stack-> prev;\
}\
else\
{\
Except_flag   =   Except_handled;\
#define   FINALLY\
          if   (Except_flag   ==   Except_entered)         \
                Except_stack   =   Except_stack-> prev;   \
}\\
if   (Except_flag   ==   Except_entered)\
{\
Except_flag   =   Except_finalized;\
#define   END_TRY\
          if   (Except_flag   ==   Except_entered)         \
                Except_stack   =   Except_stack-> prev;\
}\
if   (Except_flag   ==   Except_raised)                     \
RERAISE;\
}   while   (0)
                #undef   T  
#endif

实现代码:

#include   <stdlib.h>
#include   <stdio.h>
#include   "assert.h "
#include   "except.h "
#define   T   Except_T

#ifdef   WIN32
                __declspec(thread)
#endif

Except_Frame   *Except_stack   =   NULL;
void   Except_raise(const   T   *e,   const   char   *file,   int   line)
{
                Except_Frame   *p   =   Except_stack;
                assert(e);
                if   (p   ==   NULL)
                {
                                fprintf(stderr,   "Uncaught   exception ");
                                if   (e-> reason)
                                                fprintf(stderr,   "   %s ",   e-> reason);
                                else
                                                fprintf(stderr,   "   at   0x%p ",   e);


                                if   (file   &&   line   >   0)
                                                fprintf(stderr,   "   raised   at   %s:%d\n ",   file,   line);
                                fprintf(stderr,   "aborting...\n ");
                                fflush(stderr);
                                abort();
                }
                p-> exception   =   e;
                p-> file   =   file;
                p-> line   =   line;
                Except_stack   =   Except_stack-> prev;
                longjmp(p-> env,   Except_raised);
}
        这两段代码是基于接口与实现分离的形式,错误如下:
Compiling...
except.c
d:\程序\my   programmes\我的库函数接口与实现\except\my   except\except.h(55)   :   error   C2449:   found   '{ '   at   file   scope   (missing   function   header?)
d:\程序\my   programmes\我的库函数接口与实现\except\my   except\except.h(63)   :   error   C2014:   preprocessor   command   must   start   as   first   nonwhite   space
d:\程序\my   programmes\我的库函数接口与实现\except\my   except\except.h(64)   :   error   C2017:   illegal   escape   sequence
d:\程序\my   programmes\我的库函数接口与实现\except\my   except\except.h(70)   :   error   C2014:   preprocessor   command   must   start   as   first   nonwhite   space
d:\程序\my   programmes\我的库函数接口与实现\except\my   except\except.c(40)   :   fatal   error   C1004:   unexpected   end   of   file   found
Error   executing   cl.exe.

except.obj   -   5   error(s),   0   warning(s)
看到上面的错误,觉得都是语法上的错误,但我看书找了很久都不能解决,而且类似的代码却能运行,所以希望高手能给予解答?




[解决办法]
jf ?
[解决办法]
只有jf了
[解决办法]
接吧

热点排行