可以编写一个函数,当用C编译器编译时它将返回0,并且当用C++编译器编译时,将返回1(微不足道的
#ifdef __cplusplus情况并不令人感兴趣).
例如:
int isCPP()
{
return sizeof(char) == sizeof 'c';
}
Run Code Online (Sandbox Code Playgroud)
当然,只有在sizeof (char)不相同的情况下才会起作用sizeof (int)
另一个更便携的解决方案是这样的:
int isCPP()
{
typedef int T;
{
struct T
{
int a[2];
};
return sizeof(T) == sizeof(struct T);
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定这些例子是否100%正确,但你明白了.我相信还有其他方法可以编写相同的功能.
在运行时可以检测到C++ 03和C++ 11之间有什么区别?换句话说,是否有可能编写一个类似的函数,它返回一个布尔值,表明它是由符合标准的C++ 03编译器还是C++ 11编译器编译的?
bool isCpp11()
{
//???
}
Run Code Online (Sandbox Code Playgroud)