c - 是否有一个标准的 C 头文件为所有基本类型分配一个数值?

标签 c primitive-types

我有一些代码,根据底层数据类型的不同,其执行方式也不同。例如:

void *some_data = obtain_data();
int data_type = obtain_data_type();
switch(data_type)
{
   case CHAR:
      handle_char(some_data);
      break;
   case SHORT:
      handle_short(some_data);
      break;
   case INT:
      handle_int(some_data);
      break;
   // etc...
}

为了使其工作,我需要一个枚举或常量来为 CHAR、SHORT、INT 等分配数值。例如:

enum POD_TYPES
{
   CHAR = 1,
   SHORT = 2,
   INT = 3
   // etc.
}

“滚动我自己的”在这里是微不足道的,但似乎应该有一个更成熟的方法来实现这一点。是否有一个我可以包含的标准(或至少普遍可用)头文件已经在某处定义了这些值?我没有在 cppreference 的库标题中看到任何内容。 。 inttypes.h 似乎很接近,但经过进一步检查,这些类型都是用于转换或确定系统特定的整数最小/最大值的宏。

最佳答案

没有这样的标准常量,没有。 C 语言中有很多东西你可能认为是标准化的,但事实并非如此。


顺便说一句,您可以通过使用 C11 _Generic 关键字并实现多态性行为,而不是使用此类枚举的运行时检查,来迈出更现代的 C 编程的第一步。事实上,您可以完全摆脱枚举:

// variant.h / variant.c
#include <stdio.h>

typedef void print_func_t (const void* data);

typedef struct
{
  void* data;
  print_func_t* print;
} variant_t;


void print_char  (const void* data) { printf("%c",  *(const char*)  data); }
void print_short (const void* data) { printf("%hd", *(const short*) data); }
void print_int   (const void* data) { printf("%d",  *(const int*)   data); }

void print (const variant_t* var)
{
  var->print(var->data);
}

#define variant_init(var) { \
  .data = &var, \
  .print = _Generic((var), char: print_char, short: print_short, int: print_int) \
}

来电者:

int main() 
{
  char c = 'A';
  short s = 3;
  int i = 5;

  variant_t var[3] =
  {
    variant_init(c),
    variant_init(s),
    variant_init(i)
  };

  for(size_t i=0; i<3; i++)
  {
    print(&var[i]);
    printf(" ");
  }

  return 0;
}

关于c - 是否有一个标准的 C 头文件为所有基本类型分配一个数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42242619/

相关文章:

java解析 float 而不用指数创建 float

java - 将输入字符串转换为十六进制数表示

使用 C 或 Visual Basic 以编程方式连接到 GMail

c - C目标代码中的文件表、环境段是什么?

c - 在 C 中使用 char** 时出现运行时错误 "load of null pointer of type char"

命令行 "*"操作数在后缀表示法 c 程序中不起作用

Java - BigDecimal 和反射

objective-c - 接受原语的 Objective C 中的可变参数函数

java - 为什么允许将原始数据类型添加到 ArrayList?

java - 在 Java 中转换原始类型的成本