leach@tolerant.com (Geoffrey Leach) (12/28/89)
/*
** These three typedefs are taken from the X11R3 Xt Intrinsics
** header files.
*/
typedef enum { XtGeometryYes } XtGeometryResult;
typedef XtGeometryResult (*XtGeometryHandler)();
typedef struct _CompositeClassPart {
XtGeometryHandler geometry_manager;
} CompositeClassPart;
/*
** Here's the problem code
*/
extern XtGeometryHandler foo();
CompositeClassPart ccp = {
foo
};
/*
** And the result from the SVR3.2.2 cc is the warning:
**
** "p.c", line 22: warning: illegal pointer combination, op =
**
** The key to the complaint appears to be the fact that the
** typedef is a pointer to a procedure returning an enum.
** Is this a peculiarity of ATT's cc? Anyone know of a workaround?
*/walter@hpclwjm.HP.COM (Walter Murray) (12/29/89)
Geoffrey Leach writes: [abridged to conserve bandwidth] > typedef enum { XtGeometryYes } XtGeometryResult; > typedef XtGeometryResult (*XtGeometryHandler)(); > typedef struct _CompositeClassPart { > XtGeometryHandler geometry_manager; > } CompositeClassPart; > extern XtGeometryHandler foo(); > CompositeClassPart ccp = { foo }; > /* > ** And the result from the SVR3.2.2 cc is the warning: > ** warning: illegal pointer combination, op = > ** The key to the complaint appears to be the fact that the > ** typedef is a pointer to a procedure returning an enum. > ** Is this a peculiarity of ATT's cc? Anyone know of a workaround? > */ ---------- No, the compiler is correct. The code is illegal. Some compilers won't complain; some will. Any ANSI-conforming compiler should complain. My guess is that you didn't declare foo() the way you meant to. Perhaps you meant: extern XtGeometryResult foo(); Warning: I know nothing about the Xt intrinsics. This is just a guess. Walter Murray ---