Важное различие между С и С++

Содержание

Что касается имен типов структур, объединений и перечислений, то между языками С и C++ имеется важное различие. Чтобы понять эту разницу, проанализируйте следующее объявление структуры:

struct MyStruct {
  int a;
  int b;
} ;

В языке С имя MyStruct называется тегом. Чтобы объявить объект типа MyStruct, необходимо использовать выражение, аналогичное следующему:

struct MyStruct obj;

Как можно заметить, перед именем MyStruct находится ключевое слово struct. Однако в C++ для этой операции достаточно использовать объявление покороче:

MyStruct obj; /* Нормально для C++, неправильно для C */

В C++ не требуется ключевое слово struct. В C++, как только структура объявлена, можно объявлять переменные ее типа, используя только ее тег и не ставя перед ним ключевого слова struct. Дело здесь в том, что в С имя структуры не определяет полное имя типа. Вот почему в С это имя называется не полным именем, а тегом. Однако в C++ имя структуры является полным именем типа, и оно может использоваться для определения переменных. Не надо, впрочем, забывать, что до сих пор можно на вполне законных основаниях в программе на языке C++ использовать и объявление в стиле С.

Все сказанное выше можно обобщить для объединений и перечислений. Таким образом, в С при объявлении объектов непосредственно перед тегом имени должно находиться одно из ключевых слов: struct, union или enum (в зависимости от конкретного случая). А в C++ ключевое слово не требуется.

Так как для C++ подходят объявления в стиле С, то во время переноса программ из С в C++ по этому поводу беспокоиться нечего. Но при переносе из C++ в С соответствующие изменения сделать придется.