typeof / typeid

时间:2016-05-03 18:12:18

标签: c typeof

在Windows上使用Microsoft Visual Studio 2005是否有替代使用typeof或typeid? 我知道typeof是GCC扩展,但我对替代方案感兴趣。

以下代码失败:(仅当我使用typeof或typeid时)

#include <stdio.h>
#include <stdlib.h>
#define TEST_MACRO_TYPEOF(x, p)       \
{                                     \
  (x) = *(typeof(x) *)(p);            \
}                                     \

#define TEST_MACRO_TYPEID(x, p)       \
{                                     \
  (x) = *(typeid(x) *)(p);            \
}                                     \

#define TEST_MACRO_INT(x, p)          \
{                                     \
  (x) = *(int *)(p);                  \
}                                     \

#define TEST_MACRO_TYPE(x, p, type)   \
{                                     \
  (x) = *(type *)(p);                 \
}                                     \

int main()
{

  int *p;
  int a, b;
  a=0;
  b=20;
  p=&b;
  TEST_MACRO_INT(a, p)
  printf("b: %d\n",a);
  TEST_MACRO_TYPE(a, p, int)
  printf("b: %d\n",a);
  TEST_MACRO_TYPEID(a, p)
  printf("b: %d\n",a);
  TEST_MACRO_TYPEOF(a, p)
  printf("b: %d\n",a);
}

错误:

source\main.c : warning C4013: 'typeid' undefined; assuming extern returning int
source\main.c : error C2059: syntax error : ')'
source\main.c : warning C4013: 'typeof' undefined; assuming extern returning int
source\main.c : error C2059: syntax error : ')'

输出(不使用TEST_MACRO_TYPEID和TEST_MACRO_TYPEOF):

b: 20
b: 20

0 个答案:

没有答案