static char buf[8];
void foo(){
const char* ptr = buf;
/* ... */
char* q = (char*)ptr;
}
The above snippet will generate \"warnin
As long as you are fine with GCC/clang specific code then this should do the job:
#define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq)
#define CONST_CAST(TYPE,X) CONST_CAST2 (TYPE, const TYPE, (X))
const char *ptr = buf;
char *q = CONST_CAST(char *, ptr);
Alternatively, a modified version based on Is cast of pointer to anonymous union valid in C11?:
#define CONST_CAST2(TOTYPE,FROMTYPE,X) ((union {FROMTYPE _q; TOTYPE _nq;}){._q=constBoo}._nq)