Я - опытный разработчик C#, какие вещи я должен знать для кодирования эффективно в c/c ++? [закрытый]

ASCII? Никакая современная ОС больше не использует ASCII. Они все используют коды на 8 битов, по крайней мере, подразумевая, что это - или UTF-8, ISOLatinX, WinLatinX, Макрочеловек, Shift JIS или независимо от того, что там.

единственный тест, о котором я знаю, должен проверить на недопустимые символы UTF-8. Если Вы находите кого-либо, то Вы знаете, что это не может быть UTF-8. То же, вероятно, возможно для UTF-16. Но когда это не набор Unicode, тогда будет трудно сказать, какой кодовой страницей Windows это могло бы быть.

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

существует код там для проверки законности символов UTF.

6
задан 2 revs, 2 users 100% 19 July 2013 в 14:56
поделиться

19 ответов

Я не могу согласиться со многими советами, которые вы получили. Вам не следует не сосредотачиваться на ручном управлении памятью. Ручное управление памятью было / трудно избежать в C. Однако для большей части кода C ++ нет необходимости в использовании ручного управления памятью. Ручное управление памятью часто используется в большом объеме кода, что приводит к множеству проблем, которых можно было бы легко избежать.

Первое и самое важное, что нужно изучить, - это стандартная библиотека. Он существенно отличается от .NET (мягко говоря). Я бы сразу посоветовал взять копию Accelerated C ++ и поработать над ней. Он предназначен для людей, занимающих именно ваше положение (т.е. изучающих C ++, но уже имеющих опыт работы хотя бы с одним другим языком), и для этой ситуации я Я почти уверен, что лучшей книги нет.

Изменить: (в основном в ответ на комментарий Кенни) - это правда, что, особенно если вы поддерживаете существующий код, есть довольно хороший шанс, что вы застрянете в изучении любой нормальный человек, вероятно, предпочел бы избежать всевозможных неприятностей. Точно так же, в зависимости от того, к какой команде вы присоединитесь, вы можете застрять в уродстве даже в новом коде. К сожалению, без достаточного количества знаний и опыта работы с языком может быть не совсем понятно, что искать.

я застряну в изучении всяческих неприятностей, которых, вероятно, предпочел бы избежать любой здравомыслящий человек. Точно так же, в зависимости от того, к какой команде вы присоединитесь, вы можете застрять в уродстве даже в новом коде. К сожалению, без достаточного количества знаний и опыта работы с языком может быть не совсем понятно, что искать.

я застряну в изучении всяческих неприятностей, которых, вероятно, предпочел бы избежать любой здравомыслящий человек. Точно так же, в зависимости от того, к какой команде вы присоединитесь, вы можете застрять в уродстве даже в новом коде. К сожалению, без достаточного количества знаний и опыта работы с языком может быть не совсем понятно, что искать.

9
ответ дан 8 December 2019 в 02:03
поделиться

Если вы планируете работать над платформой Windows, вам стоит взять копию Advanced Windows Debugging , которая содержит отличное введение в различные инструменты отладки которые доступны разработчикам Windows.

0
ответ дан 8 December 2019 в 02:03
поделиться

На мой взгляд, есть несколько вещей, которые вам нужно изучить / обновить:

  1. Указатели (классические и интеллектуальные указатели), новое / удаление всего этого
  2. STL. Пару лет назад было много людей, которые относились к C ++ как к "Си с классами". И дело, конечно, не в этом. Знание STL не только сэкономит вам много времени, но также даст вам хорошее представление о том, как некоторые вещи должны быть выполнены на C ++ (в вашем коде), чтобы упростить их использование для других разработчиков.
  3. Шаблоны. Я знаю, что большинство людей думают, что шаблоны довольно просты, но если копнуть глубже;)
  4. Boost. Как и в случае с STL, в Boost есть много интересных вещей, которые вы можете использовать в повседневной работе.

Я думаю, что это самые важные из них.

0
ответ дан 8 December 2019 в 02:03
поделиться

Бейте себя по голове, пока не умрете ваша способность чувствовать боль.

0
ответ дан 8 December 2019 в 02:03
поделиться

As stated by others, pointers and memory management should be your priorities. You definitely need to understand pointers. That is the most difficult concept in C/C++ programming. It seems a lot of people just can't get their minds around pointers and until you do, you will never be a C or C++ programmer.

Yes, there are great libraries that handle memory management for you but, because there is a lot of code that has been developed without those libraries, you are probably going to be dealing with some mallocs/frees or new/delete's. Unless of course, you have the luxury of walking into a job where you are only writing new code and you can "do things right" from the start. If you find that company, let me know. I'd like to submit my resume too!

0
ответ дан 8 December 2019 в 02:03
поделиться

Во-первых, это управление памятью, включая указатель ...

И научиться кодировать что-нибудь кросс-платформенное (это то, что мне нравится;))

0
ответ дан 8 December 2019 в 02:03
поделиться

Синтаксис всегда можно подобрать в любое время даже после получения позиции. Важно учитывать, как решить проблему. Какой алгоритм лучше подойдет для конкретной задачи. Сколько вы помните объектно-ориентированного программирования. Насколько хорошо вы справляетесь с указателями и арифметикой указателей.

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

0
ответ дан 8 December 2019 в 02:03
поделиться

Это зависит от того, в ЧЕМ у вас есть опыт. Вряд ли у кого-то есть опыт во всем и вокруг C #. Одно может быть управление памятью. С другой стороны, если у вас есть большой опыт работы с небезопасным кодом C #, вы уже знаете почти все, что есть. Другое дело, например, платформа / com. То же самое, если вы уже много работали над программированием взаимодействия. Чтобы быть эффективным, вам, вероятно, потребуется немного практики. Также стиль программирования часто сильно отличается.

2
ответ дан 8 December 2019 в 02:03
поделиться

Если вы уже знаете C #, вы, вероятно, хочу освежить в памяти управление памятью, указатели / ссылки и (для C ++) STL.

1
ответ дан 8 December 2019 в 02:03
поделиться

Указатели вредят, обращайтесь с ними осторожно!

1
ответ дан 8 December 2019 в 02:03
поделиться

Я думаю, это зависит от того, какую должность C / C ++ вы имеете в виду. Для встроенной работы вам лучше хорошо разбираться в указателях и понимать ключевое слово volatile. Для вещей более высокого уровня (особенно в C ++) вы, вероятно, захотите изучить некоторые из популярных библиотек (STL, boost и т. Д.). Для большей части программирования на C будет важно быть комфортным с POSIX.

Я думаю, номер один с точкой - управление памятью. Это означает malloc / free, new / delete, все прочие странные вещи C ++ (конструкторы копирования) и указатели в целом.

1
ответ дан 8 December 2019 в 02:03
поделиться

I want my pointers to pointers to pointers baby!

3
ответ дан 8 December 2019 в 02:03
поделиться

С практической точки зрения я бы сказал, что приоритет номер один - вы снова тренируетесь в ручном управлении временем жизни объектов. Большая экономия времени в C # и мире .Net - это волшебство, которое предоставляет сборщик мусора. В управляемом мире все еще необходимо управлять памятью, но это гораздо более простая задача, и она не обязательно связана с поддержанием ментальной модели владения объектами и времени их жизни.

В C / C ++ вы снова входите в мир проблемного управления памятью, управления временем жизни и владения объектами.

6
ответ дан 8 December 2019 в 02:03
поделиться
15
ответ дан 8 December 2019 в 02:03
поделиться

Арифметика указателя, вероятно, будет первой в списке. Кроме того, может помочь хорошее понимание управления памятью в неуправляемом мире - например, напоминание удалить то, что вы создаете с помощью new .

17
ответ дан 8 December 2019 в 02:03
поделиться

Самый важный совет, который я могу придумать: не пытайтесь применять методы кода C # с C ++. Избегайте создания объектов с новыми, используйте бесплатные функции, забудьте об отражении ... просто относитесь к нему как к совершенно другому языку и попытайтесь изучить его с нуля.

1
ответ дан 8 December 2019 в 02:03
поделиться

Первое, что нужно изучить: C и C ++ - два разных языка. Даже в тех случаях, когда код действителен на обоих, очень часто это плохой код на обоих (иногда ни на одном из них).

Выберите один из языков и изучите его. Затем научитесь другому, если хотите. C ++ более сложен, но вы уже будете знакомы со многими из них. C менее сложен, но работает иначе, чем C #. С помощью C вы программируете на более низком уровне, ближе к машине, что может быть желательно или нежелательно.

0
ответ дан 8 December 2019 в 02:03
поделиться

Вы можете посмотреть это видео от службы технической поддержки Google, в котором объясняются передовые методы кодирования JavaScript, которое является основной частью разработки расширений Firefox

http://www.youtube.com / watch? v = 0LKDImgRfrg

альтернативный текст http://0.gvt0.com/ThumbnailServer2?app=vss&contentid=4d0ae57a8484fdf8&offsetms=275000&itag=w160&hl=en&sigh=GnGo871-122Drht4_GnGo878122Drht4 чем арифметика указателей, как было указано, управление памятью имеет огромное значение.

0
ответ дан 8 December 2019 в 02:03
поделиться

Я бы занялся управлением памятью с другой точки зрения: прочитайте книгу по архитектуре компьютера, чтобы понять, что такое память на самом деле, а затем освежите свой ассемблер. Это даст вам представление о том, что происходит под капотом (который очень тонкий в C). C ++ помогает немного продвинуться вперед, но ассемблер все еще скрывается под капотом.

Фактически C ++ - это C с классами и шаблонами. Это небольшое упрощение и технически неверно, но дает вам 80% пути.

Тогда ... купите:

  • Язык программирования C Кернигана и Ричи. Это книга C.

  • Язык программирования C ++, автор Strousoup; это стандартный справочник по C ++.

В зависимости от того, насколько глубоко и хардкорно вы разбираетесь, вы можете захотеть получить книги по Эффективному C ++ и Ускоренный C ++.

0
ответ дан 8 December 2019 в 02:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: