Данное диагностическое правило добавлено по просьбе пользователей.
Анализатор обнаружил ситуацию с удалением 'const'-квалификатора. Изменение объекта, объявленного с квалификатором 'const', через указатель/ссылку на не-'const' тип ведет к неопределенному поведению. Также зачастую такой код свидетельствует о плохом дизайне приложения.
Рассмотрим пример:
void read_settings(const char *buf); const char* get_settings_file_name(); bool settings_present(); // .... void init_settings() { const char name[MAX_PATH] = "default.cfg"; if (settings_present()) { strcpy((char *)name, get_settings_file_name()); } read_settings(name); }
Для того, чтобы избежать неопределённого поведения, нужно отказаться от константности при объявлении локальной переменной:
void read_settings(const char *buf); const char* get_settings_file_name(); bool settings_present(); // .... void init_settings() { char name[MAX_PATH] = "default.cfg"; if (settings_present()) { strcpy(name, get_settings_file_name()); } read_settings(name); }