, , char?
.
, "2D-" - .
" char" char **
_Generic().
#define xtype(X) _Generic((&X), \
char (*)[4][4]: "char [4][4]", \
char *(*)[4] : "char *[4]", \
char *** : "char **", \
char (*)[4] : "char [4]", \
char ** : "char *", \
char * : "char", \
default : "?" \
)
int main(void) {
char a[4][4];
char *b[4];
char **c;
puts(xtype(a));
puts(xtype(b));
puts(xtype(c));
puts(xtype(a[0]));
puts(xtype(b[0]));
puts(xtype(c[0]));
puts(xtype(a[0][0]));
puts(xtype(b[0][0]));
puts(xtype(c[0][0]));
}
char [4][4]
char *[4]
char **
char [4]
char *
char *
char
char
char
_Generic() C, . , , , OP .
, _Generic, , a,b,c. _Generic, , , .
#define xtype(X) _Generic((&X), \
char (*)[][4] : "char [][4]", \
char *(*)[] : "char *[]", \
char *** : "char **", \
char (*)[] : "char []", \
char ** : "char *", \
char * : "char", \
default : "?" \
)