URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2250
[ Назад ]

Исходное сообщение
"Знакомство с gcc"

Отправлено Grinder , 05-Ноя-03 19:28 
Я пытаюсь начать писать на C++ под FreeBSD, и сразу же столкнулся с проблемой, наверняка глупой.
Элементарный код:
#include <iostream>
using namespace std;
main () {
 cout << "Hello World\n";
}
не компилится, и пишет, что не может найти iostream. Видимо в переменной окружения нужно прописать какие-то пути? Какие? Или что-то другое?

Содержание

Сообщения в этом обсуждении
"Знакомство с gcc"
Отправлено denn , 05-Ноя-03 19:39 
проверь ветку. скомпиль если че.
/usr/include/g++/iostream

"Знакомство с gcc"
Отправлено asso , 06-Ноя-03 04:45 
У тебя наверное gcc совсем древний.  Правильнее (в основном, с точки зрения стиля) писать так:

#include <iostream>

using std::cout;
using std::endl;

int main(int argc, char *argv[])
{
    cout << "Hello World" << endl;
}  

g++ hello.cpp -o hello


"Знакомство с gcc"
Отправлено Grinder , 06-Ноя-03 09:31 
asso спасибо, все нормально скомпилилось.


"Знакомство с gcc"
Отправлено Blackgrin , 18-Дек-03 11:58 
У меня была похожая проблема, ничего не хотело компилироаться :(
Полез в путь который было предложено проверить и я обноружил, что в /usr/includes нет g++, но есть c++/3.2/ ну а там уже есть иострим....  Какую версию g++ лучше всего поставить?

"Знакомство с gcc"
Отправлено Blackgrin , 18-Дек-03 22:29 
Никак не могу понять :(  данный вариант у меня работает. НО, что еще нужно в будущем писать в using`е? Вот к примеру:
для работы с файлами подключил #include <fstream>
Не понравился компилятору оператор ifstream
написал using std::ifstream;  заработало. Но не буду же я для всех операторов, которые вызываю писать юсинг... да и не уверен, что все будут работать.... Может кто подскажет , что делать?
Версия gcc - 3.2  

"Знакомство с gcc"
Отправлено Soldier , 19-Дек-03 09:43 
>Никак не могу понять :(  данный вариант у меня работает. НО,
>что еще нужно в будущем писать в using`е? Вот к примеру:
>
>для работы с файлами подключил #include <fstream>
>Не понравился компилятору оператор ifstream
>написал using std::ifstream;  заработало. Но не буду же я для всех
>операторов, которые вызываю писать юсинг... да и не уверен, что все
>будут работать.... Может кто подскажет , что делать?
>Версия gcc - 3.2

Лично меня этот gcc 3.2 со своими новыми особенностями уже задолбал. То одно ему не нравится, то другое. А разбираться просто времени нет, поэтому я дефалтовым компилером поставил gcc 2.95 - с ним все отлично компилиться. А что касается самого gcc 3.2, то у меня скомпилилось когда заменил  #include <iostream> на #include <iostream.h>  При этом даже не надо было указывать namespace:

//hello.cpp
#include <iostream.h>
main () {
cout << "Hello World\n";
}
//

Компилил: g++ -o hello hello.cpp

Правда при этом g++ ругнулся, что <iostream.h> -  это неправильно, и что надо <iostream>, но можно заставить его заткнуться опцией -Wno-deprecated:

g++ -o hello hello.cpp -Wno-deprecated

Почему оно так все запущено - не разбирался, не до этого сейчас, поэтому не уверен, что сработает у всех  


"Знакомство с gcc"
Отправлено Soldier , 19-Дек-03 10:02 
>Почему оно так все запущено - не разбирался, не до этого сейчас,
>поэтому не уверен, что сработает у всех

Разобрался :) По идее должно сработать у всех, хотя кто знает :)

P.S. strace наш друг!



"Знакомство с gcc"
Отправлено Макс Зиналь , 01-Янв-04 19:37 
>Лично меня этот gcc 3.2 со своими новыми особенностями уже задолбал.
>То одно ему не нравится, то другое. А разбираться просто времени нет,

А зря. Не нравится ему, главным образом, код, не соответствующий
стандарту языка. История "возмужания" C++ длинная и сложная, много
есть старомодных фич, которых по уму следовало бы избегать, есть и
такие, использование которых уже сейчас помечено как "не рекомендуемое",
а то и грозящее "неопределённым" результатом.

>поэтому я дефалтовым компилером поставил gcc 2.95 - с ним все отлично
>компилиться. А что касается самого gcc 3.2, то у меня скомпилилось когда
>заменил  #include <iostream> на #include <iostream.h>  При этом даже не
>надо было указывать namespace:
>
>//hello.cpp
>#include <iostream.h>
>main () {
> cout << "Hello World\n";
>}
>//
>
>Компилил: g++ -o hello hello.cpp
>

Пример некорректного антикварного кода. Абсолютно весь runtime (и
унаследованный от C, и относящийся к C++) ныне запихали в std::,
дабы исключить возможные конфликты имён с пользовательскими
идентификаторами. По слухам, <stdio.h> через пару лет могут объявить
"deprecated", так что привыкайте к `#include <cstdio>` да std::printf()
:)

У GCC 3.x серий, по крайней мере, стало существенно лучше с поддержкой
сложных шаблонов. 2.95.3, конечно, в некоем смысле эталон, но - эталон
старомодных практик C++-программирования. Которые в нём достигли своего
апогея как раз после того, как все серьёзные эксперты раскритиковали их
в пух и прах.

А после `using namespace std` должно всё содержимое оного namespace'а
быть доступно. Так что шось у вас с вашей конкретной локальной установкой
GCC не то.


"Знакомство с gcc"
Отправлено Soldier , 05-Янв-04 08:01 
>>Лично меня этот gcc 3.2 со своими новыми особенностями уже задолбал.
>>То одно ему не нравится, то другое. А разбираться просто времени нет,
>
>А зря. Не нравится ему, главным образом, код, не соответствующий
>стандарту языка. История "возмужания" C++ длинная и сложная, много
>есть старомодных фич, которых по уму следовало бы избегать, есть и
>такие, использование которых уже сейчас помечено как "не рекомендуемое",
>а то и грозящее "неопределённым" результатом.

А что именно зря? Реальная ситуация - открыли свою конторку, весь софт сгоряча
решили писать сами, программировать умеют трое, реально рассчитывать можно на
двоих. Весь год сплошной аврал. Програмлю я уже довольно давно и у меня своих
наработок с мегабайт исходного текста еще с ДОС-овских времен. Естественно я время
от времени эти наработки использую и естественно там сплошь и рядом "старомодные
фичи". И вот мне надо что-то срочно сделать, а у gcc 3.2.x понимаешь ли теперь
"новомодные фичи" появились. Помоему вполне естественное решение вернуть старый
добрый gcc 2.95, а "разборки" с gcc 3.2 отложить до более подходящего момента.


>>поэтому я дефалтовым компилером поставил gcc 2.95 - с ним все отлично
>>компилиться. А что касается самого gcc 3.2, то у меня скомпилилось когда
>>заменил  #include <iostream> на #include <iostream.h>  При этом даже не
>>надо было указывать namespace:
>>
>>//hello.cpp
>>#include <iostream.h>
>>main () {
>> cout << "Hello World\n";
>>}
>>//
>>
>>Компилил: g++ -o hello hello.cpp
>>
>
>Пример некорректного антикварного кода. Абсолютно весь runtime (и
>унаследованный от C, и относящийся к C++) ныне запихали в std::,
>дабы исключить возможные конфликты имён с пользовательскими
>идентификаторами. По слухам, <stdio.h> через пару лет могут объявить
>"deprecated", так что привыкайте к `#include <cstdio>` да std::printf()
>:)
>
>У GCC 3.x серий, по крайней мере, стало существенно лучше с поддержкой
>
>сложных шаблонов. 2.95.3, конечно, в некоем смысле эталон, но - эталон
>старомодных практик C++-программирования. Которые в нём достигли своего
>апогея как раз после того, как все серьёзные эксперты раскритиковали их
>в пух и прах.
>

В принципе спасибо за лекцию, только я уже сам более или менее во всем разобрался -
читать вроде еще не разучился, да и Интернет всегда под рукой:))) И даже потихоньку
правлю кое-какой код. Благо мой 2.95.4 и с большинством "новых фич" работает
нормально :)))

Да и насчет iostream.h - для полноты картины, вы забыли упомянуть, что там есть строки
#include <iostream> и using std::cout
- поэтому оно все и сработало. ;-)


>А после `using namespace std` должно всё содержимое оного namespace'а
>быть доступно. Так что шось у вас с вашей конкретной локальной установкой
>
>GCC не то.

А это вы к чему и о чем? Я вроде ни на что подобное не жаловался :)))


"Знакомство с gcc"
Отправлено Макс Зиналь , 05-Янв-04 20:01 
>В принципе спасибо за лекцию, только я уже сам более или менее во всем
>разобрался - читать вроде еще не разучился, да и Интернет всегда под

Приятно встретить человека, который не разучился читать - а то нынче
развелось неграмотных - ANY KEY на клавиатуре найти не могут :).

>рукой:))) И даже потихоньку правлю кое-какой код. Благо мой 2.95.4 и с
>большинством "новых фич" работает нормально :)))

http://boost.sourceforge.net/regression-logs/cs-Linux.html

Можно сравнить 2.95.3 с набором прочих компиляторов по сугубо
формальным признакам.

>Да и насчет iostream.h - для полноты картины, вы забыли упомянуть,
>что там есть строки #include <iostream> и using std::cout
>- поэтому оно все и сработало. ;-)

Как обычно - все зависит от компилятора. Он вовсе не обязан именно
так реализовывать "старомодный" STL. Есть, например, весьма культурный
компилятор от HP под названием aCC, так вот у него #include <iostream>
и #include <iostream.h> в одной программе приводит к килограмму ошибок
на линковке. И это вполне допускается стандартом.

> А это вы к чему и о чем? Я вроде ни на что подобное не жаловался :)))

Перечитайте исходное сообщение от некоего Grinder.


"Знакомство с gcc"
Отправлено Soldier , 06-Янв-04 06:01 
>>Да и насчет iostream.h - для полноты картины, вы забыли упомянуть,
>>что там есть строки #include <iostream> и using std::cout
>>- поэтому оно все и сработало. ;-)
>
>Как обычно - все зависит от компилятора. Он вовсе не обязан именно
>
>так реализовывать "старомодный" STL. Есть, например, весьма культурный
>компилятор от HP под названием aCC, так вот у него #include <iostream>
>и #include <iostream.h> в одной программе приводит к килограмму ошибок
>на линковке. И это вполне допускается стандартом.

Перечитайте исходное сообщение от некоего Grinder. Речь шла о gcc :)))

>> А это вы к чему и о чем? Я вроде ни на что подобное не жаловался :)))
>
>Перечитайте исходное сообщение от некоего Grinder.

Ну так и ответили б некоему Grinder - я то тут причем??? :)))


"Знакомство с gcc"
Отправлено Макс Зиналь , 06-Янв-04 20:59 
>Перечитайте исходное сообщение от некоего Grinder. Речь шла о gcc :)))
>

А Вы собираетесь писать не на C++, а на некоем специальном GNU C++?
Тогда Вас погубит команда GCCшных же разработчиков - они почему-то
не очень-то серьёзно воспринимают "проблемы" обратной совместимости
со старыми глюками, а ориентируются на стандарт :).


"Знакомство с gcc"
Отправлено Soldier , 06-Янв-04 21:57 
>>Перечитайте исходное сообщение от некоего Grinder. Речь шла о gcc :)))
>>
>
>А Вы собираетесь писать не на C++, а на некоем специальном GNU
>C++?
>Тогда Вас погубит команда GCCшных же разработчиков - они почему-то
>не очень-то серьёзно воспринимают "проблемы" обратной совместимости
>со старыми глюками, а ориентируются на стандарт :).

Нда... Куда нас понесло-то. Вы случайно учителем в школе не работаете? Или в ВУЗ-е
каком? :))) Вообще говоря речь шла о конкретных проблемах с конкретным компилятором
и давались советы как это дело победить и речь шла опять же о конкретном
компиляторе. Мой самый первый пост (тред номер 6) - это не критика и не вопрос, а
просто констатация факта - ну в самом деле задолбал меня этот gcc 3.2,  пока был
дефалтовым компилером.  Вы  же непонятно с чего сделали какие-то странные выводы о
том на чем я там собираюсь писать и непонятно зачем запостили чуть ли не статью о
новых стандартах написания программ на С++.  Отдавая должное вашей эрудиции и
знаниям, мне все же показалось, что ваш пост номер 8 был несколько не в тему,
поскольку адресовался лично мне, а я ни о чем подобном не спрашивал, так как
считаю, что с такими вещами вполне могу разобраться самостоятельно.


P.S. А клавишу ANY KEY я у себя тоже не нашел. Может подскажете где ее поискать:)))