Tag: typeof

如何保存typeof的结果?

我是一个新的程序员,主要使用Code :: Blocks for C 99 。 我最近发现了typeof()因为它被隐藏为__typeof __(),我想知道你是否可以因typeof而保存一个类型。 就像是: type a = __typeof__(?); 要么 #define typeof __typeof__ type a = typeof(?); 这可能吗?

为msvc或替代解决方法模拟__typeof__的最佳方法是什么?

我有一些代码 #define DEBUG_PRINT(x,…) \ do \ {\ _Pragma(“GCC diagnostic push”) \ _Pragma(“GCC diagnostic ignored \”-Wunused-value\””) \ __typeof__((0,x)) _x = x; \ _Pragma(“GCC diagnostic pop”) \ DEBUG_PRINT_PTR((#x), &_x, __VA_ARGS__);\ } while(0) //The repetition of debug_print_printf_specifier is to avoid repetition for custom types. #define DEBUG_PRINT_PTR(xstr, xp,…) \ _Generic((*xp), \ const char *: debug_print_printf_specifier(xstr, (void *)xp, TYPE_PTR_TO_PRINTF_SPECIFIER(xp), __FILE__, […]

如何在C代码中获取变量的类型?

有没有什么方法可以在C中自动发现变量的类型,或者通过程序本身的某种机制,或者 – 更可能 – 通过使用编译器的预编译脚本传递到它的位置解析了变量并为它们分配了类型? 我正在寻找关于此的一般性建议。 下面是关于我需要什么和为什么的更多背景。 我想改变OpenMP减少子句的语义。 在这一点上,简单地通过调用函数替换源代码中的子句(通过脚本)似乎是最容易的,然后我可以定义函数来实现我想要的缩减语义。 例如,我的脚本会转换它 #pragma omp parallel for reduction(+:x) 进入这个: my_reduction(PLUS, &x, sizeof(x)); #pragma omp parallel for 在哪里,我早些时候(比方说) enum reduction_op {PLUS, MINUS, TIMES, AND, OR, BIT_AND, BIT_OR, BIT_XOR, /* … */}; 并且my_reduction有签名 void my_reduction(enum reduction_op op, void * var, size_t size); 除此之外, my_reduction必须像程序员最初预期的那样将加法运算应用于简化变量。 但我的function无法知道如何正确地做到这一点。 特别是,虽然它知道操作的类型( PLUS ),原始变量的位置( var )以及变量类型的大小,但它不知道变量的类型本身。 […]