【发布时间】:2020-03-30 04:57:51
【问题描述】:
我有一个我不输入的变量。所以要打印我不知道是使用%d还是%f。为此,我想在打印之前检查它的类型。
现在来检查我想这样使用的类型:
if (typeof(int) == voltage) {
snprintf(chars, sizeof(chars), "%d", voltage);
}
现在这是无效的。
我需要一种方法来检查变量类型。
我正在使用两个变量进行测试,但我认为以下也是无效的。
#define getIntType(a,b) ({ __auto_type _a = (a); __auto_type _b = (b); _a == typeof(int) ? _a : _b; });
int a = 10;
double b = 20.0;
int x = getIntType(a,b)==?; //How to call and how to store in type var of this x?
以及如何从宏中返回值/如何使用它?
#define typecheck(type,x) \
({ type __dummy; \
typeof(x) __dummy2; \
(bool)(&__dummy == &__dummy2); \
}) // How to return value to check?
//Then how to check?
int a = 10;
double b = 20.0;
//int x = getIntType(a,b)? a : b;
//bool isInt = typecheck(typeof(int), a);
【问题讨论】:
-
typeof是 GCC 扩展,而不是标准运算符。 -
我从 SO 中的其他问题中读到了这一点。我需要检查变量的类型。那么用什么?
-
你怎么会不知道
voltage变量的类型呢?你不是在程序前面声明了吗? -
它来自哪里并不重要。您需要先声明变量,然后才能将 API 响应读入其中。
-
@Rifat:Barmar 的意思是这个函数必须有一个已知的 C 语言声明,即
void battery_get_level_status(double * output),这意味着output只能是double。因此,如果您想为多种不同类型重用相同的函数,泛型将帮助您,但您将在调用时知道变量的实际类型,因为 C 根本不支持多态性或继承。换句话说,如果您在您最喜欢的 IDE 中将鼠标悬停在battery_status上,您可能会得到一个工具提示。这个工具提示说什么?