最佳答案
编写一个函数是可能的,当用 C 编译器编译时,函数将返回0,而用 C + + 编译器编译时,函数将返回1
#ifdef __cplusplus
不感兴趣)。
例如:
int isCPP()
{
return sizeof(char) == sizeof 'c';
}
当然,只有当 sizeof (char)
不同于 sizeof (int)
时,上述方法才会有效
另一种更便携的解决方案是这样的:
int isCPP()
{
typedef int T;
{
struct T
{
int a[2];
};
return sizeof(T) == sizeof(struct T);
}
}
我不确定这些例子是否100% 正确,但是你已经明白了。我相信还有其他方法可以编写相同的函数。
在运行时可以检测到 C + + 03和 C + + 11之间的哪些差异(如果有的话) ?换句话说,是否有可能编写一个类似的函数,返回一个布尔值,指示它是由一个符合要求的 C + + 03编译器还是 C + + 11编译器编译的?
bool isCpp11()
{
//???
}