Пятница, 18.07.2025, 07:33
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
.:: Меню ::.
.:: Категории каталога ::.
Разное [5]
Различные темы по программированию
Пакет SWT [4]
Практикуемся в написании оконных приложений на Java
Среды разработки, компиляторы и т.п [3]
Сравнения, описания, плюсы и минусы сред разработки. Сравнение компиляторов.
Java [8]
Объектно-ориентированные соображения.
Си++ [19]
Коротко и ясно
Ассемблер [6]
Машинные коды, побитно :)
Форма входа
.:: Поиск ::.
.:: Дополнительно ::.
    Хостинг от Loqo.ru
             .:: Коментируем ::.
Главная » Статьи » Текстовый материал » Си++

Системное программирование, часть 1, задание 1
Один из основных вопросов начинающего программиста, это - "Почему не запускается ?", вот пример программы, которая компилируется одним компилятором, а другим нет (даже двумя)
Обсуждалась прога
Code

#include <iostream.h>
void main(void)
{
  int k,i;
  int power (int,int);
  for (i=0; i<10; i++)
{
  k=power (2,i);
  cout << "i= " << i << ", k=" << k << endl;
  }
}

int power (int x, int n)
{
  int p=1;
  for (int i =0; i<=n; i++) p *=x;
  return p;
}

Данный пример я попытался скомпилировать в Visual Studio 2008 pro и в Dev-C++
Работать код отказался, как в VS, так и в Dev-C++, плюёт следующее

1>.\main.cpp(1) : fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory

Убираем .h из инклюда.
(Посмотрел файлы iostream в Visual Studio, Dev-C++ и в Borland Builder. У Борланда (возможно и у в других версиях языка C++), этот файл имеет расширение h, поэтому убирать .h не надо.)
Далее получаем

1>.\main.cpp(17) : error C2065: 'cout' : undeclared identifier
1>.\main.cpp(17) : error C2065: 'endl' : undeclared identifier

Что за ...
Google forever ! smile
Решение кроется в добавлении после инклюда строчки
using namespace std;
(Предположу, что у Борланда использование пространства имён std, без явного указания этого факта, производит сам компилятор)
Объявление всех имён из данного пространства глобальными является признаком плохого стиля, как пишет Страуструп.

В Dev-C++ добавляется сообщение о том, что main должен возвращать значение типа int, даже если не используем return.
В VS сообщение появляется если в конце программы, мы, решим использовать return.

Ещё один путь, хороший стиль.
При использовании cout и других подобных ей функций добавляем перед ними std::, строку с using убираем

std::cout << "i=" << i << "k=" << k << std::endl;

Можно и с using, но по другому: using std::cout;, вставляем в код, перед использованием.

Кстати исполняемый файл скомпилированый и слинкованый продуктами от Microsoft занял на диске - 9728 байт, а файл полученный с помощью GCC или G++ занял 497751 байт, всего-то в 50 раз больше ! (Могу предположить, что необходимые статические библиотеки прикрепляются к файлу) Причина мне не известна, но я выясню с помощью отладчика.
И возможно напишу об этом.

Рабочая версия под Visual Studio 2008:

Code

#include <iostream>

int power (int x, int n)
{
  int i, p=1;
  for (i=1; i<n; i++) p*=x;
  return p;
}

void main(void)
{
  int i, k;
  for (i=0; i<10; i++)
  {
  k=power(2,i);
  std::cout<<"i = " << i << ", k = " << k << std::endl;
  }
  system ("pause");
}

Если объявить функцию power до main, то её не надо прописывать в коде, перед выполнением (как в первоначальном варианте)

system ("pause"); - выполняем консольную команду ОС - pause.
(Можно вызвать любую консольную команду, например вывод содержимого директории на экран - system ("dir");)

Результат:

Модификация программы:

Code

#include <iostream>
#include <locale.h>

int power (int x, int n)
{
  int i, p=1;
  for (i=1; i<n; i++) p*=x;
  return p;
}

void main(void)
{
  setlocale(LC_ALL,"Rus");
  int i, k, in;
  std::cout << "Введите основание: ";
  std::cin >> in;
  for (i=0; i<10; i++)
  {
  k=power(in,i);
  std::cout<<"i = " << i << ", k = " << k << std::endl;
  }
  system ("pause");
}

Добавлено: приглашение на ввод, ввод непосредственно основания целочисленного типа, и в первом параметре функции power изменена двойка на переменную in.

Пример результата:

Категория: Си++ | Добавил: C0demaker (24.02.2009)
Просмотров: 2168 | Рейтинг: 0.0/0
Всего комментариев: 0

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ant1 © 2025