とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

プログラム言語CでRTTIもどきに似て非なるもの

超穴日記 - プログラミング
グロ注意。

/* RTTI lib */
#include<stddef.h>
#define RTTI(T) typedef struct RTTI_##T{T value;const char*const name;const size_t size;}RTTI_##T
#define RTTI_INIT(T) {0,#T,sizeof(T),}
#define RTTI_CAST(T) *(T*)&
#define RTTI_NAME(OBJ) OBJ.name
#define RTTI_SIZE(OBJ) OBJ.size

int main(void){
#include<stdio.h>
RTTI(int);
RTTI_int n = RTTI_INIT(int);
printf("%d - %s - %lu\n", n, "int", sizeof(n));
printf("%d - %s - %lu\n", ++RTTI_CAST(int)n, RTTI_NAME(n), RTTI_SIZE(n));
printf("%d - %s - %lu\n", ++n.value, n.name, n.size);
#undef RTTI
#undef RTTI_INIT
#undef RTTI_CAST
#undef RTTI_NAME
#undef RTTI_SIZE
}