Можно написать функцию, которая при компиляции с компилятором C вернет 0 и при компиляции с компилятором С++ вернет 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% правильны, но вы получаете идею. Я считаю, что есть и другие способы написать одну и ту же функцию.
Какие различия, если таковые имеются, между С++ 03 и С++ 11 могут быть обнаружены во время выполнения? Другими словами, можно ли написать аналогичную функцию, которая вернет логическое значение, указывающее, скомпилировано ли оно компилятором С++ 03 или компилятором С++ 11?
bool isCpp11()
{
//???
}