Есть ли что-то, что я могу сделать в C, но я не могу сделать в C ++? - PullRequest
12 голосов
/ 04 февраля 2009

Есть ли что-то, что я могу сделать в C, но я не могу сделать в C ++? Я наткнулся на вопрос на сайте с образцами вопросов для интервью ...

Ответы [ 22 ]

42 голосов
/ 30 июля 2010

Объявите переменную с именем 'class', например:

int class = 0;
22 голосов
/ 04 февраля 2009

Вот подробный список функций C, которые несовместимы с C ++.

20 голосов
/ 30 июля 2010

... это все, что я могу сделать в C, но не в C ++.

Оба языка являются законченными по Тьюрингу, поэтому теоретически вы можете кодировать одинаково функциональные приложения в обоих.

OTOH, C ++ не является надмножеством C. Особенно C99 имеет некоторые функции, которых нет в C ++. Например. назначенные инициализаторы, массивы переменной длины в структурах и в качестве автоматических переменных. В зависимости от вашего «что-нибудь», это может быть то, что C ++ не может сделать, но C может.

15 голосов
/ 04 февраля 2009

В C вы можете создавать литералы массива («составной литерал»), но в C ++ вы не можете

/* p points to the first element of an array of 4 int */
int *p = (int[]){1, 2, 3, 4};

Вы также можете создать массив с размером, еще не известным во время компиляции, но C ++ не имеет такой возможности («массив переменной длины»):

// create array. size is known at runtime only.
int p[rand() % 5 + 1];
10 голосов
/ 04 февраля 2009
int new = 0;

работает в C, но, очевидно, не может работать в C ++, потому что «new» - зарезервированное слово.

Существуют и другие «хитрости» с зарезервированными словами, но кроме этого вы можете в значительной степени делать все в C, что вы можете делать в C ++.

6 голосов
/ 04 февраля 2009

Есть некоторые вещи, которые вы можете сказать в C, чего вы не можете в C ++ (потому что C ++ имеет более строгую проверку синтаксиса, а C имеет более обширный "устаревший" синтаксис).

Кроме того, могут быть некоторые среды выполнения (O / S + библиотека + компилятор), которые поддерживают C, но не C ++, поэтому вы можете делать C на тех платформах, где вы не можете использовать C ++ .

6 голосов
/ 30 июля 2010

Довольно много вещей. Например, в C вы можете написать код, подобный этому:

void * v = 0;
char * p = v;

и вы можете создавать массивы, как это:

int main() {
    int n = 42;
    int a[n];
    return 0;
}

ни один из которых не будет компилироваться в C ++.

6 голосов
/ 05 февраля 2009

C ++ не хватает C99 restrict квалификатор . Следовательно, нет способа заставить компилятор выполнять оптимизацию, основанную на знании того, что указатели не являются псевдонимами.

5 голосов
/ 04 февраля 2009

Синтаксически есть несколько вещей, которые вы можете написать в C, которые не будут компилироваться в C ++ (см. Несовместимость между ISO C и ISO C ++ для мучительных деталей.). Если вы спрашиваете на более высоком уровне, есть ли какая-либо программа, которую можно написать на C, но невозможно на C ++, тогда ответ «Нет».

3 голосов
/ 04 февраля 2009

В 'C' вам не нужны предварительные декларации. Это позволяет передавать параметры, которые интерпретируются неправильно. (Не то чтобы это отличная функция, но вы не можете сделать это в C ++)

в файле A:

float sum(float a, float b)
{
   return a+b;
}

в файле B

main()
{
  printf("%f\n", sum(1,2));
}

с C, компилируется, но печатается 0,000

с C ++ вам нужно float sum(float,float); перед printf, и это даст ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...