开发者

Could I retrieve the datatype from a variable in C?

开发者 https://www.devze.com 2023-02-13 09:37 出处:网络
Has a way to get the datatype in C? For example: int foo; if (foo is int) { // do something } or something like:

Has a way to get the datatype in C?

For example:

int foo;

if (foo is int)
{
    // do something
}

or something like:

if (typeof(foo) == typeof(int))
{
    // do somethin开发者_C百科g
}

Thanks in advance.


This is called type introspection or reflection and is not supported by the C language. You would probably have to write your own reflection library, and it would be a significant effort.


There is a typeof extension in GCC, but it's not in ANSI C: http://tigcc.ticalc.org/doc/gnuexts.html#SEC69


The fact that foo is an int is bound to the name foo. It can never change. So how would such a test be meaningful? The only case it could be useful at all is in macros, where foo could expand to different-type variables or expressions. In that case, you could look at some of my past questions related to the topic:

Type-generic programming with macros: tricks to determine type?

Determining presence of prototype with correct return type


Since C11, you can do that with _Generic:

if (_Generic(foo, int: 1, default: 0)) // if(typeof(foo)==int)
{
    // do something
}


The only time you wouldn't know the type is if the type of foo is defined by a typedef -- if that's the case, your example should reflect it. And why do you need to something dependent on the type? There may well be a way to solve your actual problem, but you haven't presented your actual problem.

0

精彩评论

暂无评论...
验证码 换一张
取 消