Modelo:Linguaxes de programación/Diferencias entre C e C++

C++ baseouse en C e conserva unha gran parte da súa funcionalidade, pero non son linguaxes completamente compatibles a nivel de código. Existen algunhas diferencias fundamentais que cómpre coñecer:

  • C permite maior liberdade á hora de “xogar cos bytes” —o que pode resultar tan beneficioso como prexudicial—.
  • C non ten un tipo booleano ou “lóxico” —cuxo valor pode ser «certo» ou «falso»— nin un para cadeas de texto. Porén, os tipos booleanos poden imitarse mediante un tipo «enum» e trabállase coas cadeas de texto mediante matrices de caracteres.
  • Aínda que en C adoita facerse por convención, en C++ é obrigatorio que as funcións se declaren antes de empregarse.
  • En C hai que engadir a palabra clave enum ou struct ao declarar unha variable do tipo dunha enumeración ou estrutura previamente definida, mentres que en C++ emprégase directamente o nome da estrutura.
  • A biblioteca estándar de funcións de C++ é moito máis completa, e permite empregar tamén a de C.
  • En C++ as funcións devolven 0 de maneira predeterminada, mentres que en C debe especificarse sempre.
  • C++ necesita prototipos.
  • En C, unha función da forma f() pode recibir un número calquera de parámetros de calquera tipo, mentres que en C++ non podería recibir ningún parámetro.
  • En C, sizeof('x') equivale a sizeof(int), mentres que en C++ equivale a sizeof(char).

Asignación implícita dun tipo void*

editar

En C++ non se pode facer unha asignación implícita dun tipo void* a outro tipo calquera. Por exemplo, a seguinte liña de código é completamente correcta en C (de feito, é probablemente o mellor modo de escribila), pero non compilaría en C++:

int *x = malloc(sizaof(int) * 10);

Memoria dinámica

editar

En C hai unha única función principal de asignación de memoria, malloc(), que se emprega para asignar memoria tanto a elementos individuais como a matrices, e a memoria sempre se libera mediante a función free().

Porén, en C++ a asignación de memoria para as matrices é algo distinta da asignación de memoria para elementos individuais. Para as primeiras empréganse os operadores new[] e delete[], mentres que para os segundos new e delete.