comprobación de parámetros en macro C

Me gustaría definir una macro que también compruebe los límites de sus argumentos. Por ejemplo:

typedef unsigned char Byte; #define BQDATA 3 #define MAX_BQ_SIZE (255-BQDATA) #define BQ(SIZE,NAME) \ #if SIZE > MAX_BQ_SIZE \ #error BQ NAME exceeds maximum size \ #endif \ Byte NAME[BQDATA+SIZE+1] = {BQDATA,BQDATA,BQDATA+SIZE} 

De modo que si se encuentra:

 BQ(300,bigq); 

Se marcaría el error.

Si size y max_bq_size son constantes en tiempo de comstackción, puede usar #define BQ(size, name) BUILD_BUG_ON (size > max_bq_size); . No recibe un mensaje personalizado, pero al menos un error.