Чушь собачья. Никогда ничего подобного я не говорил. Я говорил, что она для этого не предназначена.
Значит это -
Я никогда подобного не говорил. Хотя бы потому что никакого "режима компиляции C++ кода в gcc" не существует. Вся эта фраза -- полная бессмыслица.
- написал кто-то другой
Исходя из всего вышенаписанного можно сделать вывод, что g++ по сути не является компилятором, это лишь менеджер для компилятора gcc.
Путь линуксоида очень напоминает путь воина, главными особенностями которого являются ответственность и самодисциплина. Но и награды этого пути достойны: это свобода и мастерство.
Чушь собачья. Никогда ничего подобного я не говорил. Я говорил, что она для этого не предназначена.
Значит это -
Я никогда подобного не говорил. Хотя бы потому что никакого "режима компиляции C++ кода в gcc" не существует. Вся эта фраза -- полная бессмыслица.
- написал кто-то другой
Исходя из всего вышенаписанного можно сделать вывод, что g++ по сути не является компилятором, это лишь менеджер для компилятора gcc.
Дядя Теодор не может четко ответить на мой вопрос.
Выяснили же уже.
1. И gcc и g++ - фасады для кучи программ компиляторов, сборщиков и т.д.
2. gcc изначально предназначен для компиляции Си-программ.
3. Можно использовать gcc с параметрами для компиляции C++-программ.
4. g++ - то же самое, что и gcc с параметрами для компиляции C++-программ.
5. Фсе.
Есть многое на свете, друг Горацио,
Что и не снилось нашим мудрецам.
Кто может подробно и аргументировано объяснить новичку и дилетанту чем gcc отличается от g++?
gcc — Gnu Compiler Collection, вызывает компиляторы других языков.
g++ — компилятор с языка c++ для gcc.
Подробности знает вики и гугль.
Не ответ
Простите, а вы внимательно читали про gcc -o proga proga.cc -lstdc++ ?
все просто как видно
раньше (это было очень давно и это было неправдой) - gcc - был GNU C Compiler - соотвественно в те времена он компилил только Си поэтому дядя Теодор и запутался - он кореной линуксист еще тех давних времен. (дядя Теодор не обижайтесь - все мы люди и все мы ошибаемся)
Времена прошли и gcc - стал Gnu Compiler Collection - тоесть стал поддерживать много языков включая C и С++
g++ — просто компилятор для языка c++
Вывод:
тоесть если вы написали прогу на С++ чтобы не парится компилируете с g++ но никто не мешает компилировать ее с gcc но тогда будьте добры и не забудьте указать gcc что это программа С++.
Ну остается только один вопрос - эфективность компилирования - тоесть кто эфективнее компилит - или разницы нет?
4. g++ - то же самое, что и gcc с параметрами для компиляции C++-программ.
5. Фсе.
Нет не Фсе.
Если g++ - то же самое, что и gcc, то зачем при своей работе он вызывает gcc? Если он компилятор, то почему он не может обойтись без gcc?
Ответ, ИМХО, очевиден - g++ не является компилятором. Это менеджер, препоцессор, или как-то ещё можно назвать, для gcc, но никак не самостоятельный компилятор если он не может обойтись без gcc.
Почему gcc обходится без g++, а g++ не может обойтись без gcc ?
Путь линуксоида очень напоминает путь воина, главными особенностями которого являются ответственность и самодисциплина. Но и награды этого пути достойны: это свобода и мастерство.
Вот мне интересно, друзья, а зачем все эти вопросы? Какая разница что есть что с технической точки зрения? Какое в этом практическое значение для программирования? Главное одно: если мне нужно скомпилировать программу, написанную на языке С++, я вызывают команду g++. Все. Чего здесь еще мудрить и спорить-то?
Я думаю, если кому-то из нас действительно интересно, что есть gcc, а что g++ с технической точки зрения, тот может обратиться к официальной документации на http://gcc.gnu.org
На мой взгляд, тема уже переходит в пустой трёп.
Нет не Фсе.
Если g++ - то же самое, что и gcc, то зачем при своей работе он вызывает gcc? Если он компилятор, то почему он не может обойтись без gcc?
Ответ, ИМХО, очевиден - g++ не является компилятором. Это менеджер, препоцессор, или как-то ещё можно назвать, для gcc, но никак не самостоятельный компилятор если он не может обойтись без gcc.
Почему gcc обходится без g++, а g++ не может обойтись без gcc ?
Вот здесь: Чем gcc отличается от g++ я вроде бы ответил на все подобные вопросы. То ли вы не читали тему, то ли ещё что-либо. Вообще было бы неплохо почистить тему от ненужного флуда, оставив информативные сообщения, и добавить ссылку на неё в какой-нибудь FAQ, потому что вопрос возникает достаточно часто и, вообще говоря, сам по себе интересен (потому что специалист должен разбираться в своих инструментах, а не «тыкать вот эту кнопочку»).
То ли вы не читали тему, то ли ещё что-либо. Вообще было бы неплохо почистить тему от ненужного флуда, оставив информативные сообщения, и добавить ссылку на неё в какой-нибудь FAQ, потому что вопрос возникает достаточно часто и, вообще говоря, сам по себе интересен (потому что специалист должен разбираться в своих инструментах, а не «тыкать вот эту кнопочку»).
Совсем ерунду убрал. Тему прикрпеляю в назидание потомкам так сказать.
Смотрите man gcc, на предмет g++. Там всё подробно описано. По сути (хотя выше уже об этом несколько раз это упоминали) g++ можно воспринимать как алиас на gcc с особыми параметрами.
И, напоследок, всё же хотелось бы обратить внимание.
gcc и g++ оба могут использоваться как линкеры. Так вот, у C++ – скомпилированных объектов для инициализации и финализации переменных используется не до конца изученный мною механизм. То ли там на каждый ошник есть инициализатор/финализатор, который для всех переменных вызывает конструкторы/деструкторы, то ли сами переменные как–то хитро помечаются в ошниках на инициализацию. Я видел в документации XL C++, как можно расставлять целочисленные приоритеты разным переменным, видимо, эти приоритеты соблюдаются между ошниками. Так или иначе, этот механизм для меня под покровом тайны. Вот у Ады можно запустить gnatbind, и всё видно, где что инициализируется, всё можно посмотреть. У C++ я такого не видел. Я видел только в разных библиотеках (aspell, к примеру) предупреждения, что, если линковать Cшным линкером, то библиотека может не инициализироваться.
If you want to get to the top, you have to start at the bottom
Все нормальные компиляторы C/C++, и GCC не исключение, смотрит на название файла. Если дать команду:
gcc test.c то он будет компилировать файл test.c как C программу. А если переименовать файл:
gcc test.cpp то он будет компилировать как C++ программу. То есть какое расширение файла такой компилятор и используется.
Единственное замечание: Я это проверял только в GNU/Linux и Windows. В GNU/Linux это работает, а если использовать Windows и MinGW то надо указывать нужный компилятор.
(BratSinot) писал(а):Если дать команду:
gcc test.c то он будет компилировать файл test.c как C программу. А если переименовать файл:
gcc test.cpp то он будет компилировать как C++ программу. То есть какое расширение файла такой компилятор и используется.
К сожалению, вы не правы. Только что проверял. Создал файл, назвал его main.cpp, написал в нём С++-код. Потом дал команду:
По вашим словам, компилятор должен был понять, что нужно компилировать именно С++-код. Однако он выдал целый список ошибок, потому что пытался компилировать его именно как С-код.
However, the use of gcc does not add the C++ library. g++ is a program that calls GCC and treats `.c', `.h' and `.i' files as C++ source files instead of C source files unless -x is used, and automatically specifies linking against the C++ library. This program is also useful when precompiling a C header file with a `.h' extension for use in C++ compilations. On many systems, g++ is also installed with the name c++.
К сожалению, вы не правы. Только что проверял. Создал файл, назвал его main.cpp, написал в нём С++-код. Потом дал команду:
зависит от "умолчальных" настроек программы, насколько я помню, там где-то есть конфиг, и в конфиге прописаны ключи
1)всё как С
2)всё как ++
3)в зависимости от расширения.
у вас - п2
у оппонента п3
правы - оба.
Я тут поставил последний компилятор, он вообще не заработал:
пишет command not found. выяснилось, что он только для тестеров, потому называется g++4.4
переставлять не стал, сделал симлинк. пока - нормально.
(BratSinot) писал(а):Если дать команду:
gcc test.c то он будет компилировать файл test.c как C программу. А если переименовать файл:
gcc test.cpp то он будет компилировать как C++ программу. То есть какое расширение файла такой компилятор и используется.
К сожалению, вы не правы. Только что проверял. Создал файл, назвал его main.cpp, написал в нём С++-код. Потом дал команду:
По вашим словам, компилятор должен был понять, что нужно компилировать именно С++-код. Однако он выдал целый список ошибок, потому что пытался компилировать его именно как С-код.
Система: Debian 5.01
Компилятор: gcc 4.3.2
насколько я помню, в Debian чтобы скомпилировать .cpp файлы с помощью gcc надо вызвать gcc file.cpp -lstdc++
(RasenHerz) писал(а):насколько я помню, в Debian чтобы скомпилировать .cpp файлы с помощью gcc надо вызвать gcc file.cpp -lstdc++
Признаться, никогда не пользовался такой командой. Всегда и на всех Линуксах, с которыми работал, вызывал g++ и всё...
(drBatty) писал(а):зависит от "умолчальных" настроек программы, насколько я помню, там где-то есть конфиг, и в конфиге прописаны ключи
1)всё как С
2)всё как ++
3)в зависимости от расширения.
у вас - п2
у оппонента п3
правы - оба.
(RasenHerz) писал(а):насколько я помню, в Debian чтобы скомпилировать .cpp файлы с помощью gcc надо вызвать gcc file.cpp -lstdc++
Признаться, никогда не пользовался такой командой. Всегда и на всех Линуксах, с которыми работал, вызывал g++ и всё...
(drBatty) писал(а):зависит от "умолчальных" настроек программы, насколько я помню, там где-то есть конфиг, и в конфиге прописаны ключи
1)всё как С
2)всё как ++
3)в зависимости от расширения.
у вас - п2
у оппонента п3
правы - оба.
Спасибо за подсказку. Честно, не знал я такого...
man gcc:
Код:
Compiling C++ Programs
C++ source files conventionally use one of the suffixes .C, .cc, .cpp, .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, .hpp, .H, or (for
shared template code) .tcc; and preprocessed C++ files use the suffix .ii. GCC recognizes files with these names and compiles them as C++ programs
even if you call the compiler the same way as for compiling C programs (usually with the name gcc).
Так или иначе, этот механизм для меня под покровом тайны.
это традиционная сишная фишка - только для джедаев
я десять раз подумаю, перед тем как сделать глобальную переменную, причём именно потому, что не знаю, как она будет инициализироваться. и если в С это не так уж и страшно, то в С++, с его жутко запутанными классами...
я десять раз подумаю, перед тем как сделать глобальную переменную, причём именно потому, что не знаю, как она будет инициализироваться. и если в С это не так уж и страшно, то в С++, с его жутко запутанными классами...
В современном С++ использование глобальных переменных не оправдано ничем. Иными словами, глобальные переменные в С++-программах вообще не нужны. В свете этого неопределённый порядок инициализации глобальных переменных уже не является проблемой.
я десять раз подумаю, перед тем как сделать глобальную переменную, причём именно потому, что не знаю, как она будет инициализироваться. и если в С это не так уж и страшно, то в С++, с его жутко запутанными классами...
В современном С++ использование глобальных переменных не оправдано ничем. Иными словами, глобальные переменные в С++-программах вообще не нужны. В свете этого неопределённый порядок инициализации глобальных переменных уже не является проблемой.
эх... если бы всё было так просто
а куда деть миллионы строк на Си? переписывать?
но если из Си ещё как-то можно получить доступ к данным класса, то вот из асма это сделать намного сложнее. Как раз для обмена данными между модулями на разных языках и есть смысл использовать глобальные переменные. Хотя в чистом С++ - согласен, это зло.