Как вы упомянули GCC, вы можете использовать расширение компилятора для этого, если вы не используете C11:
Сначала напишите макрос, который эмулирует C ++ is_same
.А затем назовите его с типами, которые вы хотите сравнить.
Минимальный пример для вашего конкретного случая:
#include<assert.h>
#define is_same(a, b) \
static_assert(__builtin_types_compatible_p(typeof(a), typeof(b)), #a " is not unsigned int")
int main()
{
int fail_count = 0;
is_same(fail_count, unsigned int);
}
Компилятор утверждает:
<source>: In function 'main':
<source>:4:3: error: static assertion failed: "fail_count is not unsigned int"
static_assert(__builtin_types_compatible_p(typeof(a), typeof(b)), #a " is not unsigned int")
^~~~~~~~~~~~~
<source>:9:5: note: in expansion of macro 'is_same'
is_same(fail_count, unsigned int);
^~~~~~~
См. Демо