2010-01-16 2 views
1

В прошлый раз, когда я сильно использовал C++, это было много лет назад, и это было строго сделано на платформе Windows. В частности, я использовал Microsoft Visual Studio в качестве моей среды разработки и разработал некоторые привычные шаблоны для использования Microsoft C++. Например, я использовал void main() вместо стандарта int main().Ресурсы для написания кода ANSI C++

Теперь я беру класс, где требуется разработать программы, совместимые с ANSI C++, и код будет скомпилирован с использованием g ++. Я быстро узнал, что система («ПАУЗА») не работает в g ​​++ и, вероятно, является Microsoft.

Кто-нибудь знает какие-либо хорошие ресурсы (сайты, учебные пособия, книги), где я могу узнать, что еще лучше, чем жалоба ANSI C++?

спасибо.

+1

Функция системы() является стандартной. Это команда «пауза», которой нет. Функция просто выдает команды системной оболочке. – Clifford

+0

Попробуйте это более портативный * pause * idiom: 'std :: cin.игнорировать (1000000, '\ n'); '. Он ждет, пока не будет введена новая строка. –

+1

В ожидании новой строки часто не удается остановить программу, особенно в программах новичков, которые используют значение std :: cin >>, чтобы что-то прочитать, чтобы новая строка, следующая за вводом, осталась непрочитанной. Обычно лучше всего читать std :: cin по функции std :: getline, так что вход на самом деле читается строкой за раз. Это позволяет избежать понимания того, как работает строка с буферизованным входом из ОС (почему ничего не может быть прочитано до тех пор, пока пользователь не нажимает кнопку ввода, за исключением некоторых систем или с некоторыми настройками терминала, или если по какой-либо причине вход покраснет). – Tronic

ответ

0

Я очень рекомендую эти два:

  • comp.lang.c++ новостей Usenet. Если вы можете получить хорошего поставщика услуг Usenet и использовать средство чтения новостей, вы сможете избавиться от спама. Я использую eternal-september.org, и мне это нравится.
  • Прочитано C++ FAQ. У него много отличной информации.

Предоставлено, они оба не очень велики, если вы хотите введение в учебник для C++, но похоже, что вы уже знаете некоторые C++, и вам нужно узнать больше и исправить вредные привычки. По моему личному опыту, вышеупомянутые два очень полезны в этом.

О comp.lang.c++, убедитесь, что вы в полной мере ознакомьтесь с их часто задаваемыми вопросами и скрылись перед публикацией. То же самое относится и к стековому потоку, хотя здесь может не понадобиться скрываться.

Используя g++, скомпилируйте свои программы с помощью g++ -ansi -pedantic -Wall -Wextra -Weffc++ и убедитесь, что вы понимаете все предупреждения.Я использую:

g++ -Wextra -Wall -Weffc++ -ansi -pedantic -Woverloaded-virtual \ 
-Wcast-align -Wpointer-arith 
+0

Я очень рекомендую избегать comp.lang.C++ (и I ' m все еще один из его самых популярных 10-ти плакатов) - вам гораздо лучше задавать вопросы C++ здесь. Если вы хотите использовать Usenet, перейдите на страницу http://groups.google.com/group/comp.lang.c++.moderated/topics – 2010-01-16 18:10:41

+0

@Neil: Почему бы не «comp.lang.C++»? –

+0

Спам (которого вы можете избежать в определенной степени, используя, как вы сказали, читателя новостей), троллей (которых вы не можете) и некоторых не очень ярких людей. Умеренная группа намного лучше. – 2010-01-16 18:16:02

2

Если вы используете g ++, тогда скомпилируйте флаги -pedantic и -std = C++ 98. Единственный стандарт для ANSI C++ - это действительно документ стандарта ISO, который нельзя рекомендовать новичкам. Вы ошибаетесь в отношении системы («ПАУЗА»), кстати - system() является частью ANSI C++ - ее параметр не стандартизирован.

1

Большинство книг на C++ будут несовместимыми с платформой (конечно, если они специально не предназначены для Visual C++). Вот некоторые good books, которые рекомендованы профи на ## C++

+0

Это отличный список. Спасибо. – different

1

Есть много хороших уроков НКУ, имеет флаг, который будет убедиться, что код ANSI C совместимый тоже gcc -ansi -Wall -fsyntax-only -pedantic

* Wall - turn on all errors 
* ansi - use strict ANSI C specification 
* fsyntax-only - only checks syntax 
* pedantic - reject violations 

Per , комментарии Кроме того, вы можете использовать * -Wextra, чтобы включить несколько дополнительных предупреждений,

обновление спасибо за обновление по капитализации., и упоминание о -pedantic

+1

То -Во я думаю. – 2010-01-16 18:08:42

+1

у вас неправильно сделана капитализация, это на самом деле '-Wall'. Кроме того, gcc/g ++ manpage говорит * В режиме C++ удалите расширения GNU, которые конфликтуют с ISO C++. [...] Опция '-ansi' не запрещает безвозмездно отклонять программы, отличные от ISO. Для этого требуется «-патентный» в дополнение к -ansi. * –

+0

manpage говорит -> manpage говорит о '-ansi' –

1

GCC будет делать хорошую работу, чтобы говорить вам, когда ваш код не ISO C++ соответствует (не то, что она является стандартом ISO, а не стандарт ANSI). Установите параметры предупреждения -Werror -Wall и просто исправьте все предупреждения; вы скоро получите из неприемлемых привычек и получите меньше предупреждений.

1

Много вентиляторов gcc.

важные флаги для компиляции с под Visual Studio, чтобы быть максимально жесткими являются:

cl /Za /W4 ...rest of command... 

/Za отключает определенные расширения Microsoft и/W4 самый высокий уровень предупреждения (за исключением/Wall, который сетует смешные вещи).

Я бы также рекомендовал использовать современную версию Visual Studio - старые версии (VC6) были смехотворно несоответствующими, и Microsoft официально заявляет, что они никогда не существовали на данный момент.

+0

В настоящее время я использую Microsoft Visual Studio 2008, и на основе всех этих комментариев установлен gcc. Раньше я никогда не слышал об этом компиляторе. – different

0

Я бы порекомендовал.

сайты:

книги:

  • эффективный
  • C++
  • эффективные СТЛИ
  • современного C++ дизайна
  • шаблон метапрограммирование

говорить/слушать эксперт и понимание того, что они должны сказать, и почему.

0

C++ Primer (4th Ed), по-видимому, является лучшей книгой начинающих в наши дни, поскольку он использует современный подход и учит всем важным частям языка. Ускоренная C++ - это еще одна книга, которую часто рекомендуют профессионалы, и она служит хорошим введением, но я бы не рекомендовал ее покупать больше, потому что C++ Primer прекрасно ее заменяет и лучше охватывает язык.

Примечание: C++ Primer Plus (это довольно плохая книга) не имеет ничего общего с C++ Primer.

Язык программирования Stroustrup на языке C++ всегда должен быть упомянут, конечно, потому что он написан отцом языка. Многие люди находят это просвещением, но я лично не рекомендовал бы его изучать язык.

Все упомянутые мной книги описывают только стандарт ISO без нестандартных расширений. Программы в этих книгах должны работать с любым компилятором C++.

+0

C++ Primer - от Lippman & Lajoie, а Accelerated C++ - от Koenig & Moo. Не делает другого «в значительной степени бесполезным». – 2010-01-16 20:57:54

+0

Авторы 4-го издания - Lippman, Lajoie и Moo, и новое издание сильно отличается от 3-го издания. Хотя AC++ - хорошее введение, с современным подходом, он охватывает только очень небольшую часть языка. C++ Primer также использует тот же современный подход (благодаря Moo, я должен предположить). Поскольку C++ Primer также намного более совершенен, я больше не вижу причины покупать AC++. Ответ отредактировал (после вашего комментария), чтобы уточнить, что я имел в виду. – Tronic

+0

Этот обзор в Amazon разъясняет проблему: http://www.amazon.com/review/RLTC8B1UR0LRQ/ref=cm_cr_pr_viewpnt#RLTC8B1UR0LRQ Эндрю Кениг, другой автор AC++, также комментирует этот обзор: http: // www. amazon.com/review/R2V99WR8ZNX4NM/ref=cm_cr_pr_viewpnt#R2V99WR8ZNX4NM (два отзыва связаны с самыми положительными положительными и отрицательными отзывами книги) – Tronic

0

Мне нравится посещать www.cplusplus.com всякий раз, когда у меня есть сомнения, особенно о стандартной библиотеке C++.

Смежные вопросы