Just nu i M3-nätverket
Jump to content

Typeof i c


Guest

Recommended Posts

Hej

 

Jag undrar om man kan få reda på vad en variabel (eller objekt) har för typ i c. Det ska vara till för att lägga in i en länkad lista så man vet vilken typ det är på objekten i listan. Eventuellt får man lägga varannan listobjekt som string och där spara undan vad det är för typ.

 

till exempel:

 

char* a = "hejhej";

 

typeof(a) så ska man få char* som sträng eller nått?

 

i java heter väl motsvarande instanceof?

 

mvh

Christian

 

Link to comment
Share on other sites

Jag är rätt säker på att det inte finns i C.

 

I C++ däremot går det ju bra:

 

http://en.wikipedia.org/wiki/Typeid

 

#include <iostream>
#include <typeinfo>
using namespace std;

int main ()
{
 int x;
 char c;
 char* s = &c;

 cout << typeid(x).name() << endl;
 cout << typeid(c).name() << endl;
 cout << typeid(s).name() << endl;

 return 0;
}

 

Kompilerat med g++ får jag:

 

$ ./rtti.exe
i
c
Pc
$

 

[inlägget ändrat 2007-02-09 17:08:18 av lizardKng]

Link to comment
Share on other sites

  • 2 weeks later...

Det går i GCC att ta reda på vilken typ en variabel har compile-time. Vet inte om det är användbart för dig men såhär kan det se ut:

 

#include <stdio.h>

typedef char* type_t;

int main() {
 type_t a = "one";
 typeof(a) b = "two";

 if (__builtin_types_compatible_p(typeof(a), int))
   printf("a and b are int: a= %d b= %d\n", a, ;
 else if (__builtin_types_compatible_p(typeof(a), char))
   printf("a and b are char: a= %c b= %c\n", a, ;
 else if (__builtin_types_compatible_p(typeof(a), char*))
   printf("a and b are char*: a= %s b= %s\n", a, ;
 else if (__builtin_types_compatible_p(typeof(a), float))
   printf("a and b are float: a= %f b= %f\n", a, ;
 else
   puts("a and b is something else");

 return 0;
}

 

P.S. Ja, jag vet att det genererar varningar... D.S.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...