查看 typedef 是否定义了 C 中的特定类型

Find out if a typedef defines a specific type in C

我必须在 C 中实现链表数据结构。在 "linked_list.h" 头文件中,我有以下行:

typedef int ListDataType;

我的问题是,如果 ListDataType 不等于 int,我该如何终止程序?我知道如果不满足此要求,预处理器无法阻止我的程序编译(因为它对 typedefs 一无所知)。

我用 C11 编写代码,我知道 _Generic 关键字。怎样才能避免写出下面这样的东西?

{
  ListDataType q;
  const bool kListDataTypeIsNotInt = _Generic(q, int: false, default: true);
  if (kListDataTypeIsNotInt) {
    print_error_message_and_exit("list data types other than int are not supported");
  }
}

我应该改用宏 (#define LIST_DATA_TYPE int) 吗?

代码中的变量将被优化掉,我强烈怀疑优化后此代码将是 100% compile-time。

不过,如果您不确定,可以通过引入宏和静态断言对其进行微调:

#define IS_INT(q) _Generic((q), int: true, default: false)
...

ListDataType q;
_Static_assert(IS_INT(q), "list data types other than int are not supported");

这是 100% compile-time 和良好做法。