diff --git a/skeletons/constraints.h b/skeletons/constraints.h
index 255b6ae2cd1dc1892dccd863bcf2a36b9b1340ab..d299e735d1946890ce35ee99ccbb61ba32f35efe 100644
--- a/skeletons/constraints.h
+++ b/skeletons/constraints.h
@@ -45,13 +45,17 @@ asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */
 /*
  * Invoke the callback with a complete error message.
  */
+#ifdef	__GNUC__
 #define	_ASN_ERRLOG(fmt, args...)	do {	\
 	if(app_errlog)				\
 		_asn_i_log_error(app_errlog,	\
 			app_key, fmt, ##args);	\
-		break;				\
-	} while(0);
-void _asn_i_log_error(asn_app_consume_bytes_f *, void *key,
+} while(0);
+#else	/* Preprocessor does not support variable args macros */
+#define	_ASN_ERRLOG	if(app_errlog) _asn_i_log_error
+#endif
+
+extern void _asn_i_log_error(asn_app_consume_bytes_f *, void *key,
 	const char *fmt, ...) __attribute__ ((format(printf, 3, 4)));
 
 #endif	/* _ASN1_CONSTRAINTS_VALIDATOR_H_ */