Как написать программу, которая определяет ее компилятор

0

Нужно написать программу на 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++

Там лучший способ?

  • 1
    Выберите любой из ответов на связанный вопрос.
  • 0
    Вместо этого вы можете использовать sizeof('a') == 1 , поскольку sizeof(char) == 1 по определению.
Показать ещё 1 комментарий
Теги:

2 ответа

2
Лучший ответ

Вы можете проверить макрос __cplusplus чтобы узнать, скомпилированы ли вы как c++.

#include <stdio.h>

int main()
{
    printf("%s\n",
#if __cplusplus
            "C++"
#else
            "C"
#endif
          );
}
  • 1
    Preprocessor directives can not be used. , Но вы могли бы также сделать юмористический #if true трюк.
2

Стандарт 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 на моей машине

Ещё вопросы

Сообщество Overcoder
Наверх
Меню