Порядок компилирования программы (c++ в консоли)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
Sarius
Сообщения: 80
ОС: Debian

Порядок компилирования программы

Сообщение Sarius »

Есть маленькая программа :)

#include <iostream.h>
void main()
{
cout << "\nHello, World!";
}

Как её скомпилировать в бинарник?
Спасибо сказали:
Аватара пользователя
sergeyvp
Сообщения: 807
ОС: ubuntu

Re: Порядок компилирования программы

Сообщение sergeyvp »

Sarius писал(а):
15.04.2007 20:02
Есть маленькая программа :)

#include <iostream.h>
void main()
{
cout << "\nHello, World!";
}

Как её скомпилировать в бинарник?

g++ имя_исходника
Так по моему
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Порядок компилирования программы

Сообщение Uncle_Theodore »

Ну, скажем, вряд ли что хорошее из этого выйдет... :)
Во-первых, текст программы не соответствует стандарту C++
Во-вторых, iostream.h -- древний хедер, лучше уж include<iostream>

А так, да.
g++ <filename>.cc
Можно еще g++ <filename>.cc -o <programname>
иначе имя получившегося бинарника будет a.out
Спасибо сказали:
Аватара пользователя
Sarius
Сообщения: 80
ОС: Debian

Re: Порядок компилирования программы

Сообщение Sarius »

g++ hello.cc -o hello
hello.cc:3: error: `main' must return `int'
hello.cc: In function `int main(...)':
hello.cc:4: error: `cout' was not declared in this scope

А ведь и не пашет...
И что там в коде неправильно?
Вроде под Виндой работало.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Порядок компилирования программы

Сообщение elide »

Sarius, ну тебе же чорным по голубому написано:
1) 'main' must return 'int'
2) 'cout' was not declared in this scope
что непонятного ?
почитай книжку какую-нибудь по С++.... методом тыка ты будешь очень долго учиться...
слава роботам!
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Порядок компилирования программы

Сообщение Uncle_Theodore »

Sarius писал(а):
15.04.2007 20:59
g++ hello.cc -o hello
hello.cc:3: error: `main' must return `int'
hello.cc: In function `int main(...)':
hello.cc:4: error: `cout' was not declared in this scope

А ведь и не пашет...
И что там в коде неправильно?
Вроде под Виндой работало.

Да, под Виндой работало, и это один из великих грехов компании дяди Билла -- их компиляторы поддерживают кривой стандарт С++. Я этого нахлебался, когда преподавал курсы по OpenGL...

Давай так, я тебе покажу, как должен выглядеть твой код, чтобы компилироваться и работать, а ты пойдешь почитаешь хорошую книгу по стандартному C++, ладно?

main должен возвратить int, это записано в стандарте языка.
Кроме того, тебе надо указать namepace для cout'а

Посему, вот

Код: Выделить всё

#include <iostream>
int main()
{
  std::cout << "\nHello, World!\n";
  return 0;
}
Спасибо сказали:
Аватара пользователя
Sarius
Сообщения: 80
ОС: Debian

Re: Порядок компилирования программы

Сообщение Sarius »

Спасибо!
И чему нас только в универе учат?
Пошёл читать умные книги. ;)
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Порядок компилирования программы

Сообщение serzh-z »

Uncle_Theodore писал(а):
15.04.2007 21:12
main должен возвратить int, это записано в стандарте языка.
C++ разрешает использование main (и только main) без явного возврата значения. В этом случае компилятор обязан вставить "return 0" автоматически.
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Порядок компилирования программы

Сообщение Uncle_Theodore »

serzh-z писал(а):
15.04.2007 21:27
C++ разрешает использование main (и только main) без явного возврата значения. В этом случае компилятор обязан вставить "return 0" автоматически.

http://homepages.tesco.net/J.deBoynePollar...-void-main.html
This is the Frequently Given Answer to that false assertion.

The ISO C++ Standard (ISO/IEC 14882:1998) specifically requires main to return int.
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Порядок компилирования программы

Сообщение eduard_pustobaev »

serzh-z писал(а):
15.04.2007 21:27
C++ разрешает использование main (и только main) без явного возврата значения. В этом случае компилятор обязан вставить "return 0" автоматически.

Ну кое-где (Borland C++ 3.1, что касаемо вузов, то на нём в основном и учат увы) компилятор это не смущает, а вот gcc/mingw по рукам бьют.
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Порядок компилирования программы

Сообщение serzh-z »

Дядя Федор, я знаю, что по стандарту main требует возвращение типа int, но не void. Но так же стандарт разрешает компилятору неявно добавить "return 0", если вообще никакого return нет. Такое разрешено только в main.

Соответственно код:

Код: Выделить всё

#include <iostream.h>
int main()
{
cout << "\nHello, World!";
}
настолько же допустим и правилен, насколько и:

Код: Выделить всё

[code]#include <iostream.h>
int main()
{
cout << "\nHello, World!";
return 0;
}
в независимости от компилятора.
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Порядок компилирования программы

Сообщение Uncle_Theodore »

serzh-z писал(а):
15.04.2007 21:58
Дядя Федор, я знаю, что по стандарту main требует возвращение типа int, но не void. Но так же стандарт разрешает компилятору неявно добавить "return 0", если вообще никакого return нет. Такое разрешено только в main.

Соответственно код:

Код: Выделить всё

#include <iostream.h>
int main()
{
cout << "\nHello, World!";
}
настолько же допустим и правилен, насколько и:

Код: Выделить всё

[code]#include <iostream.h>
int main()
{
cout << "\nHello, World!";
return 0;
}
в независимости от компилятора.

Но main() должен все равно быть объявлен возвращающим int.
Вообще, это нехороший стиль программирования. Сказал верну int, значит возвращай! :)

Здесь проблема была в том, что в C main может быть void. Майкрософтовская Visual Studio, по крайней мере, года два назад, вообще смешивала C и C++, и у студней было такое мнение, что это один и тот же язык. В частности, void main() там проходил и в С, и в С++. А мы писали проекты, которые должны были быть платформонезависимые, и с этим было много грустных проблем...
Спасибо сказали:
Аватара пользователя
agbr
Сообщения: 486
ОС: openSUSE 10.2

Re: Порядок компилирования программы

Сообщение agbr »

Uncle_Theodore писал(а):
15.04.2007 21:12

Код: Выделить всё

#include <iostream>
int main()
{
  std::cout << "\nHello, World!\n";
  return 0;
}


:angry:
надо так:

Код: Выделить всё

#include <iostream>

int main(int argc, char** argv)
{
  std::cout << std::endl << "Hello, World!" << std::endl;
  return 0;
}
jabber: agbr@jabber.ru

против проприетарного ПО в GNU/Linux
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Порядок компилирования программы

Сообщение serzh-z »

agbr, а вот и не подеретесь... :)
Спасибо сказали: