Открытое и свободное

Блог о Linux, Open Source и больших корпорациях

С и С++: физика

April 8th, 2008 · No Comments
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

После небольшого вступления начинается практическая часть.

Например, в С++ можно объявить и использовать перечисление так:
enum viruses {no_virus=0, COM, overwite1, overwrite2, companion, parasitic, win9x};
...
void TreatFile(viruses type)

А в C нужно указывать ключевое слово enum и при вызове функции:
void TreatFile(enum viruses type)
иначе при объявлении будет ошибка
error: expected declaration specifiers or ‘...’ before ‘viruses’

Если для С++ определение переменной булевого типа вполне нормально:
bool option;
то компиляция той же конструкции в C может выдать ошибку из за отсутствия такого типа данных:
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘options’
и указать на непонятность констант true и false:
error: ‘true’ undeclared (first use in this function)
Это решается просто - объявлением однобайтового типа bool и определения констант true и false:
#ifndef __cplusplus
#ifndef bool
typedef char bool;
#define true 1
#define false 0
#endif
#endif

Или объявление переменных непосредственно в цикле в С++ разрешено и такая конструкция будет правильной
for (int i=beg;i<=buffersize;i++)
{
buffer[i]=0×00;
}

А в С поступать таким образом нельзя
error: ‘for’ loop initial declaration used outside C99 mode
и нужно объявлять переменную-итератор перед использованием в цикле
int i;
for (i=beg;i<=buffersize;i++)
{
buffer[i]=0×00;
}

Все вышесказанное проверено на компиляторе GCC версии 4.2.3

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • e-mail
  • Slashdot
  • Technorati
  • YahooMyWeb
  • Furl
  • MyShare
  • Socialogs

Tags: Programming

0 responses so far ↓

  • There are no comments yet...Kick things off by filling out the form below.

Leave a Comment