我是一个新的程序员,主要使用Code :: Blocks for C 。 我最近发现了关于typeof()
,因为它被隐藏为__typeof __() ,我想知道是否可以保存类型作为typeof的结果。是这样的:如何保存typeof的结果?
type a = __typeof__(?);
或者
#define typeof __typeof__
type a = typeof(?);
这可能吗?
我是一个新的程序员,主要使用Code :: Blocks for C 。 我最近发现了关于typeof()
,因为它被隐藏为__typeof __() ,我想知道是否可以保存类型作为typeof的结果。是这样的:如何保存typeof的结果?
type a = __typeof__(?);
或者
#define typeof __typeof__
type a = typeof(?);
这可能吗?
您应该避免使用typeof
或__typeof __()
,因为它们不是标准C.最新的C版本(C11)通过_Generic
关键字支持此操作,该关键字以相同的方式工作。
在C中没有“类型类型”,但你可以很容易地使一个自己:
typedef enum
{
TYPE_INT,
TYPE_FLOAT,
TYPE_CHAR
} type_t;
#define get_typeof(x) \
_Generic((x), \
int: TYPE_INT, \
float: TYPE_FLOAT, \
char: TYPE_CHAR);
...
float f;
type_t type = get_typeof(f);
不,你不能使用typeof
像t = (typeof(x) == int) ? a : b;
也不int t = typeof(x);
。
如果你是C11下,_Generic
可以帮助:
#include <stdio.h>
enum {TYPE_UNKNOWN, TYPE_INT, TYPE_CHAR, TYPE_DOUBLE};
#define type_of(T) _Generic((T), int: TYPE_INT, char: TYPE_CHAR, double: TYPE_DOUBLE, default: 0)
int main(void)
{
double a = 5.;
int t = type_of(a);
switch (t) {
case TYPE_INT:
puts("a is int");
break;
case TYPE_CHAR:
puts("a is char");
break;
case TYPE_DOUBLE:
puts("a is double");
break;
default:
puts("a is unknown");
break;
}
return 0;
}
谢谢!我将我的编译器更改为c11并使用'_Generic'。 –
有没有'标准C. typeof'操作你必须要阅读* *编译的文件(而不是代码::块IDE)了解更多信息。另外,*不要*做你想做的事情,在所有情况下99.99%不是你应该做的事情。也许如果你解释*为什么*你想这么做,那么*实际问题*是你想要解决的问题,那么我们可以帮你解决这个问题。 –
如果'var'具有类型'int',那么'typeof(var)'是'int'。你可以说'输入= int;'或任何类似的东西?这意味着什么?你为什么需要这样的东西? –
假设您想要在Java中编写'Class c =“foo”.getClass();'的方法:忘记它,它不像C那样工作。运行时没有可用的类型信息。 –