Нужно написать программу на C. Если он запущен в компиляторе языка C, программа должна напечатать "C". Если он запущен в компиляторе C++, он должен печатать "C++".
Директивы препроцессора не могут использоваться.
В голове приходит только для сравнения размера любого персонажа с размером char
вроде:
sizeof(char)==sizeof('a')
Вот как это работает:
// C code:
#include <stdio.h>
int main()
{
printf("%s", (sizeof(char)==sizeof('a') ? "C++" : "C"));
return 0;
}
Выход: C
// C++ code:
#include <stdio.h>
int main()
{
printf("%s", (sizeof(char)==sizeof('a') ? "C++" : "C"));
return 0;
}
Выход: C++
Там лучший способ?
Вы можете проверить макрос __cplusplus
чтобы узнать, скомпилированы ли вы как c++.
#include <stdio.h>
int main()
{
printf("%s\n",
#if __cplusplus
"C++"
#else
"C"
#endif
);
}
Preprocessor directives can not be used.
, Но вы могли бы также сделать юмористический #if true
трюк.
Стандарт http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf Содержит приложение о различиях между C и C++
Таким образом, он содержит разницу char vs int, которую вы используете, но также, например,
Изменение: в C++ объявление класса вводит имя класса в область, где оно объявлено, и скрывает любой объект, функцию или другое объявление этого имени в охватывающей области. В C объявление внутренней области описания тега структуры никогда не скрывает имя объекта или функции во внешней области
Пример: (из стандарта)
int x [99];
void f () {
struct x { int a ; };
sizeof (x ); /∗ size of the array in C ∗/
/∗ size of the struct in C++ ∗/
}
На что gcc дал 396 и g++ 4 на моей машине
sizeof('a') == 1
, посколькуsizeof(char) == 1
по определению.