在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