Рубрики

Напишите программу на C, которая не будет компилироваться в C ++

Хотя C ++ разработан для обеспечения обратной совместимости с C, может быть много программ на C, которые приводят к ошибке компиляции при компиляции с помощью компилятора C ++. Ниже приведены некоторые из них.

1) В C ++ ошибка компилятора вызывать функцию до ее объявления. Но в C он может компилироваться (см. Http://espressocode.top/g-fact-95/ )

#include<stdio.h>

int main()

{

   foo(); // foo () вызывается перед объявлением / определением

  

int foo()

{

   printf("Hello");

   return 0; 

}

2) В C ++ ошибкой компилятора является создание обычного указателя, указывающего на константную переменную, но это разрешено в C. (Смотрите Const Qualifier в C )

#include <stdio.h>

  

int main(void)

{

    int const j = 20;

  

    / * Приведенное ниже назначение недействительно в C ++, приводит к ошибке

       В C компилятор * может * выдать предупреждение, но приведение

       неявно разрешено * /

    int *ptr = &j;  // Нормальный указатель указывает на const

  

    printf("*ptr: %d\n", *ptr);

  

    return 0;

}

3) В C указатель void может быть непосредственно назначен другому указателю, например, int *, char *. Но в C ++ указатель void должен быть явно напечатан.

#include <stdio.h>

int main()

{

   void *vptr;

   int *iptr = vptr; // В C ++ его нужно заменить на int * iptr = (int *) vptr;

   return 0;

}

Это то, что мы замечаем, когда используем malloc (). Возвращаемый тип malloc () void *. В C ++ мы должны явно возвращать тип-возвращаемое значение malloc () к соответствующему типу, например, «int * p = (int *) malloc (sizeof (int))». В Си типотипирование не обязательно.

4) Следующая программа компилируется и работает нормально в C, но не в состоянии компиляции в C ++. Переменная const в C ++ должна быть инициализирована, но в c это необязательно. Спасибо Pravasi Meet за предложение этого момента.

#include <stdio.h>

int main()

{

    const int a;   // ЛИНИЯ 4

    return 0;

}

Line 4 [Error] uninitialized const 'a' [-fpermissive]

5) Это худший ответ среди всех, но все же правильный ответ. Мы можем использовать одно из специфических ключевых слов C ++ в качестве имен переменных. Программа не будет компилироваться в C ++, но будет компилироваться в C.

#include <stdio.h>

int main(void)

{

    int new = 5;  // new - это ключевое слово в C ++, но не в C

    printf("%d", new);

}

Точно так же мы можем использовать другие ключевые слова, такие как удаление, явный, класс и т. Д.

6) C ++ выполняет более строгую проверку типов, чем C. Например, следующая программа компилируется в C, но не в C ++. В C ++ мы получаем ошибку компилятора «неверное преобразование из« int »в« char * »». Спасибо Pravasi Meet за добавление этого пункта.

#include <stdio.h>

int main()

{

    char *c = 333;

    printf("c = %u", c);

    return 0;

}

7) C ++ требует основного возвращаемого типа int

#include <stdio.h>

void main()

{

    printf("Hello World");

}

8) Головоломка вызова функций AC / C ++
Эта статья предоставлена Абхай Рати . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Напишите программу на C, которая не будет компилироваться в C ++

0.00 (0%) 0 votes