Jump to content

    

one_eight_seven

Участник*
  • Content Count

    1229
  • Joined

  • Last visited

Community Reputation

0 Обычный

About one_eight_seven

  • Rank
    Профессионал
  • Birthday 11/11/1983

Контакты

  • Сайт
    Array

Информация

  • Город
    Array

Recent Profile Visitors

6856 profile views
  1. И что делать среди запойных специалисту, который выбил себе приемлемые условия? И вообще зачем их выбивать, если в других местах их предлагают сразу - непонятно. За что ещё надо будет постоянно бороться?
  2. Можно и вообще без файлов. Просто в командной строке. Но с файлами быстрее и удобнее
  3. Для вашего удобства это. Компилятору вообще дела нет до расширения файлов. Это, чтобы вы могли для себя быстро определить, где у вас объявления сущностей, а где их реализация. Ну и заодно, как бонус - редакторы, IDEшки могут по расширениям определить тип файла, и синтаксис подсветить, или проиндексировать их поудобнее. Но это не обязательно.
  4. Нет. const-метод вполне может изменять следующие типы данных: mutable поля класса любые данные, к которым класс имеет неконстнантный доступ. т.е. которые для класса не являются константой: те, к которым он имеет доступ по указателям и ссылкам (технически, метод не меняет поле класса, оно остаётся неизменным, но данные, доступные по этим полям - изменяемы) данные, передаваемые в const-метод по указателю или ссылке в качестве аргументов через указатели или ссылки, возвращаемые функциями напрямую доступные через namespace или класс - такие, как статические члены.
  5. Присоединяюсь к @esaulenka, а какое у вас понимание? Насколько я могу объяснить, модификатор const, применительно к методу класса, влияет не на метод класса, а на указатель this. Т.е. если у нас class C, то this в данном случае будет типа C const *, в то время как для неконстантного метода он будет C *. А статические методы не имеют указателя this в принципе.
  6. Вы связь с сутью разговора потеряли. Перечитайте и прийдите в себя.
  7. Нет. Это значит доступно и исполняется. Недоступно - это если оно BusFault или HardFault вызовет.
  8. Наоборот, очень часто доступно. Встречал два поведения: 1) Всегда читаются нули 2) одни и те же адреса используются в качестве интерфейса TX FIFO (при записи в эти адреса) и RX FIFO (при чтении по этим же адресам) В большинстве случаев лучше считать, что ОЗУ вообще не существует. Есть процессор (с его системой команд, регистрами общего назначения, SFR, прерываниями) и память. Просто память. Если нужно эту память как-то делить, это уже какая-то экзотика. Вы запретите запись через MPU? Нет, вы не запретите, запись исполнится процессором, но, в зависимости от настроек MPU (которая - периферия отображённая в память, т.е. с точки зрения процессора - опять же просто область памяти), результат этой записи может быть разным. И обработка таких событий опять же ограничивается обращениями в память и прерываниями.
  9. Ну, кому развлекуха, кому - рутина. И уж с матлабом-то эту систему построить и отладить - как два байта переслать.
  10. Да-да. Одним постом выше я об этом написал. Да и в том посте было согласие с тем, что ключи компиляции для этого должны быть. Да, это ещё одна проблема языка C. В нём разные действия выглядят одинаково. Использование указателей разительно отличается от их объявления. А выглядит очень похоже.
  11. P.S. Подумал ещё, и стал ещё сильнее согласен с тем, что на этапе компиляции такое проверять правильно. Добавил: -Wwrite-strings И получил: $ gcc -Wall -Wextra -pedantic -Wwrite-strings tst.c tst.c: In function ‘main’: tst.c:9:16: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers] 9 | char * p = "inmutable"; | ^~~~~~~~~~~ $
  12. Не согласен. Это не работа компилятора. Это работа статического анализатора кода, lint или чего-то в этом роде. В первом случае указатель прямо указывает на string literal. Во втором случае создаётся массив на стеке, который инициализируется из string literal'а, и указатель s не указывает на оригинальный литерал (который неизменяемый). Но в C, действительно много плохого. Например, вот эти вот неявные приведения типов. Я согласен, что нет ничего плохого, в том, чтобы повысить строгость типизации и повысить тем самым безопасность типов. Например, ключами компиляции.
  13. Нет, она фактически не является const char *, она является изменяемым массивом символов (mutable char array), т.е. аналогом char str[] = "String" И между char* и char[] огромная разница. Например, вот это вызовет Segfault: char * p = "inmutable"; p[1] = 'm'; А вот это прекрасно исполнится: char s[] = "chang me"; s[5] = 'e';
  14. Я когда первый раз вопрос прочитал, вообще не понял, что он про это. Синтезировал из зашифрованных исходников. Как это сделано - не особо задавался вопросом. Синтезировал DC, шифрованные исходники - IP блоки из библиотеки DesignWare (тоже от синопсиса).
  15. А теперь перестаньте бренчать бубенчиками, как клоун-петрушка. И перечитайте то, что я писал. Особенно про то, что я писал про стоимость товаров и стоимость услуг. А-то, судя по тому, что вы пишете - вы картошку считаете за услугу, сами же с этим не соглашаетесь, и выдвигаете это как довод против моих слов. Типичный приём паскуды и подлеца. Вы точно такую свою особенность хотите всем демонстрировать?