[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

what is the following type

John Doe

12/1/2008 8:55:00 PM

Hi,

I am looking at some source code and in one file there is the following
definition :

typedef enum _EXCEPTION_DISPOSITION {
ExceptionContinueExecution,
ExceptionContinueSearch,
ExceptionNestedException,
ExceptionCollidedUnwind,
ExceptionExecuteHandler
} EXCEPTION_DISPOSITION;

typedef EXCEPTION_DISPOSITION EXCEPTION_ROUTINE (
struct _EXCEPTION_RECORD *ExceptionRecord,
void *EstablisherFrame,
struct _CONTEXT *ContextRecord,
struct _DISPATCHER_CONTEXT *DispatcherContext
);
typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;

EXCEPTION_ROUTINE __C_specific_handler;

I am puzzled by the EXCEPTION_ROUTINE definition, it looks like a
function pointer but without the *. Is it a function pointer ?
3 Answers

John Doe

12/1/2008 8:57:00 PM

0

Mosfet a écrit :
> Hi,
>
> I am looking at some source code and in one file there is the following
> definition :
>
> typedef enum _EXCEPTION_DISPOSITION {
> ExceptionContinueExecution,
> ExceptionContinueSearch,
> ExceptionNestedException,
> ExceptionCollidedUnwind,
> ExceptionExecuteHandler
> } EXCEPTION_DISPOSITION;
>
> typedef EXCEPTION_DISPOSITION EXCEPTION_ROUTINE (
> struct _EXCEPTION_RECORD *ExceptionRecord,
> void *EstablisherFrame,
> struct _CONTEXT *ContextRecord,
> struct _DISPATCHER_CONTEXT *DispatcherContext
> );
> typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;
>
> EXCEPTION_ROUTINE __C_specific_handler;
>
> I am puzzled by the EXCEPTION_ROUTINE definition, it looks like a
> function pointer but without the *. Is it a function pointer ?

Hum actually I think it's a function type ... Someone to confirm ?

James Kanze

12/2/2008 1:03:00 PM

0

On Dec 1, 9:55 pm, Mosfet <mos...@anonymous.org> wrote:

> I am looking at some source code and in one file there is the following
> definition :

It looks more like C than C++. The naming conventions are also
illegal, resulting in a lot of undefined behavior (both in C and
in C++). However...

> typedef enum _EXCEPTION_DISPOSITION {
> ExceptionContinueExecution,
> ExceptionContinueSearch,
> ExceptionNestedException,
> ExceptionCollidedUnwind,
> ExceptionExecuteHandler
> } EXCEPTION_DISPOSITION;

> typedef EXCEPTION_DISPOSITION EXCEPTION_ROUTINE (
> struct _EXCEPTION_RECORD *ExceptionRecord,
> void *EstablisherFrame,
> struct _CONTEXT *ContextRecord,
> struct _DISPATCHER_CONTEXT *DispatcherContext
> );
> typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;

> EXCEPTION_ROUTINE __C_specific_handler;

> I am puzzled by the EXCEPTION_ROUTINE definition, it looks
> like a function pointer but without the *. Is it a function
> pointer ?

No. It's a function (type). You can use it to declare
functions, but not to define them. Thus, __C_specific_handler
is an (extern) function, or it would be if the name didn't
trigger undefined behavior.

--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Hendrik Schober

12/2/2008 2:37:00 PM

0

James Kanze wrote:
> On Dec 1, 9:55 pm, Mosfet <mos...@anonymous.org> wrote:
>
>> I am looking at some source code and in one file there is the following
>> definition :
>
> It looks more like C than C++. The naming conventions are also
> illegal, resulting in a lot of undefined behavior (both in C and
> in C++). However...
>
>> typedef enum _EXCEPTION_DISPOSITION {
>> ExceptionContinueExecution,
>> ExceptionContinueSearch,
>> ExceptionNestedException,
>> ExceptionCollidedUnwind,
>> ExceptionExecuteHandler
>> } EXCEPTION_DISPOSITION;
>
>> typedef EXCEPTION_DISPOSITION EXCEPTION_ROUTINE (
>> struct _EXCEPTION_RECORD *ExceptionRecord,
>> void *EstablisherFrame,
>> struct _CONTEXT *ContextRecord,
>> struct _DISPATCHER_CONTEXT *DispatcherContext
>> );
>> typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;
>
>> EXCEPTION_ROUTINE __C_specific_handler;
>
>> I am puzzled by the EXCEPTION_ROUTINE definition, it looks
>> like a function pointer but without the *. Is it a function
>> pointer ?
>
> No. It's a function (type). You can use it to declare
> functions, but not to define them. Thus, __C_specific_handler
> is an (extern) function, or it would be if the name didn't
> trigger undefined behavior.

From the look of it this is from an OS API, not from user
code, so UB shouldn't be an issue.

Schobi