[CLAIR-devel] On the declaration of PL_extension

Roberto Bagnara bagnara at cs.unipr.it
Wed Dec 5 12:37:08 CET 2007

That struct is currently declared as:

typedef struct PL_extension
{ char 		*predicate_name;	/* Name of the predicate */
   short		arity;			/* Arity of the predicate */
   pl_function_t	function;		/* Implementing functions */
   short		flags;			/* Or of PL_FA_... */
} PL_extension;

Using it in the most natural way, i.e., with something like,

#define C_PREDICATE_ENTRY(name, arity) \
   { #name, arity, (pl_function_t) name, 0 },

PL_extension c_predicates[] = {
   C_PREDICATE_ENTRY(acs_any_svalue, 3)
   C_PREDICATE_ENTRY(acs_approximate_stack, 3)

gives lots of warning with newer versions of GCC (such as

...  warning: deprecated conversion from string constant to 'char*'

Usually, features that are deprecated in GCC version x are removed
in version x+1.  In any case, would it be possible/sensible to declare
the `predicate_name' field as `const char*' instead of `char*'?
All the best,


Prof. Roberto Bagnara
Computer Science Group
Department of Mathematics, University of Parma, Italy
mailto:bagnara at cs.unipr.it

More information about the CLAIR-devel mailing list