С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 10.03.2022
Сообщений: 14

Проблема различий компиляторов

27.04.2022, 13:42. Показов 2236. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, господа. В данный момент я пользуюсь средой разработки, отличной от Visual Studio. Пользуюсь компилятором MinGW.

Суть проблемы: Я пишу код и он у меня прекрасно работает. Но мне нужно отправлять его проверяющему. Он пользуется Visual Studio с компилятором MSVS и на нем мой код работает некорректно, часто бывает, что не запускается из-за многих ошибок. Чтобы этого избежать, я открываю код через Visual Studio и исправляю возникающие ошибки. Можно ли как-то сделать так, чтобы мне не приходилось переправлять код под MSVS?

Возможно где-то некорректно выразился из-за неопытности/незнания некоторых вещей, но думаю, что вы понимаете, о чем я.

Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.04.2022, 13:42
Ответы с готовыми решениями:

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

Сравнить 2 Memo на предмет наличия в них различий и подсчитать количество этих различий
Клавиатурный тренажёр ввода текста. Вообщем есть Memo1 в который из текстового файла загружается текст, в Memo2 пользователь должен вводить...

Выделение цветом различий
Добрый день! Необходима помощь! Имеется две таблицы с одинаковыми столбцами, ключевые поля в них могут не совпадать. Если ключи...

13
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
27.04.2022, 13:58
Автоматического способа нет. Можно примеры "ошибок"? Насколько я знаю MinGW сделан на основе линуксового g++, а он более дотошный чем MSVС, т.е. возникает обратная проблема, написанное в MSVС не работает.

Есть стандарт С++, его все одинаково реализуют (правда не всегда целиком), есть WinAPI, оно тоже одинаковое для всех, и есть фичи конкретного компилятора. Их лучше не использовать в данном случае.

Добавлено через 2 минуты
Можно попробовать из MSVС взять только компилятор и заменить им MinGW в той IDE которая нравится.
0
1 / 1 / 0
Регистрация: 10.03.2022
Сообщений: 14
27.04.2022, 14:04  [ТС]
Dmitriy-T, ну вот, например:

1.
Ошибка C4996 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS
Решил проблему, переписав strcat_s.

2. В аргументах функции был char*, при вызове в функцию подавал просто строку в кавычках. В MinGW работало все хорошо, а в MSVS ошибка была в том, что const char[] не получалось преобразовать в char*.
C++
1
2
3
void func(char* str);
...
func("строка");
Как мне объяснили, строго говоря, в аргументе должно быть const char str[размер]. Проблему решил. Я могу согласиться с этим, но в MinGW все нормально работало.

Может там стандарты различались? В настройках компилятора я не прописывал никакой стандарт, версия MinGW 9.2.0.
0
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
27.04.2022, 14:26
1. Это MS борется с опасными функциями, это древнее наследие которое лучше не использовать. Можно их разрешить
C++
1
#define _CRT_SECURE_NO_WARNINGS
тогда скомпилируется, но сомневаюсь что проверяющий такое одобрит.

Лучше просто сделать свой аналог strcat_s (обертку над strcat) и использовать ее. Вынести все эти функции в отдельный *.h файл
примерно такой
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma once
#if !defined (WIN32)
errno_t strcat_s(
   char *strDestination,
   size_t numberOfElements,
   const char *strSource
) {
   strcat(strDestination, strSource);
   return 0;
}
#endif
2. Это косяк так-то, странно что MinGW такое пропускает. Надо в его настройках покопаться, скорее всего есть возможность жестче проверять.
0
фрилансер
 Аватар для Алексей1153
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,025
27.04.2022, 14:40
Цитата Сообщение от korobka228 Посмотреть сообщение
Ошибка C4996 'strcat': This function or variable may be unsafe
это не ошибка, а предупреждение (но в настройках студии, значит, включена обработка предупреждений как ошибок)

лучше использовать std::string, будет более общий и удобный код
0
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
27.04.2022, 14:58
Цитата Сообщение от Алексей1153 Посмотреть сообщение
это не ошибка, а предупреждение (но в настройках студии, значит, включена обработка предупреждений как ошибок)
В MSVC это ошибка. Лечится только дефайном:
C++
1
#define _CRT_SECURE_NO_WARNINGS
Это же MS, как без отсебятины?
0
1 / 1 / 0
Регистрация: 10.03.2022
Сообщений: 14
27.04.2022, 16:46  [ТС]
Цитата Сообщение от Dmitriy-T Посмотреть сообщение
Это же MS, как без отсебятины?
Да

К слову, дефайном я это не смог вылечить, не помогло. Просто переделал функции в strcat_s.

Но все же. Может вы знаете, как настроить MinGW или какие-то команды в настройках компилятора сделать?
0
фрилансер
 Аватар для Алексей1153
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,025
27.04.2022, 18:04
Dmitriy-T, korobka228, у меня студия без всякого дефайна пропускает и даже не предупреждает (не помню, что и где настраивал )
0
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
27.04.2022, 21:08
Цитата Сообщение от Алексей1153 Посмотреть сообщение
у меня студия без всякого дефайна
Студия какого года? Оно началось в 2015 или 2017.

Цитата Сообщение от korobka228 Посмотреть сообщение
К слову, дефайном я это не смог вылечить, не помогло.
Дефайн надо в самый верх cpp, или в свойства проекта, чтобы был выше инклюда где он используется.
0
фрилансер
 Аватар для Алексей1153
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,025
27.04.2022, 21:15
Dmitriy-T, 2019
0
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
28.04.2022, 07:54
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Dmitriy-T, 2019
2019 недавно поменял на 2022 (пока нас MS совсем не забанил).
Создаю новый проект Console App с "Hallo world", никакие настройки не трогаю.
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main()
{
    char str[100];
    strcpy(str, "123 ");
    strcat(str, "456");
 
    std::cout << str;
}
При компиляции ошибки
Code
1
2
...\Test_2022.cpp(6,5): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
...\Test_2022.cpp(7,5): error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Добавляем в начала дефайн и все собирается
C++
1
2
3
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
...
0
фрилансер
 Аватар для Алексей1153
6449 / 5643 / 1129
Регистрация: 11.10.2019
Сообщений: 15,025
28.04.2022, 08:39
Dmitriy-T, я попробовал на новом проекте. Без дефайна будет только предупреждение, если в настройках проекта отключить "SDL checks"
0
13 / 8 / 5
Регистрация: 14.04.2022
Сообщений: 63
28.04.2022, 08:54
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Без дефайна будет только предупреждение, если в настройках проекта отключить "SDL checks"
Попробовал отключить, компилируется с предупреждением. Надо запомнить эту галку, а то дефайн втыкать не всегда удобно.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.05.2022, 14:40
Цитата Сообщение от korobka228 Посмотреть сообщение
строго говоря, в аргументе должно быть const char str[размер]
Не должно. Размер игнорируется. А вот const - нужен в C++.

C++
1
2
3
void func(const char* str);
...
func("строка");
Да, mingw по умолчанию выдает для этого только предупреждение (т.к. без специальных настроек компилирует не в С++, а в диалект GNUC++). Для настройки на С++ дайте ключи "-std=c++17 -pedantic-errors".
Ну и на будущее нужно понимать, что наличие предупреждений не всегда означает, что их можно игнорировать.

Добавлено через 1 минуту
Цитата Сообщение от korobka228 Посмотреть сообщение
К слову, дефайном я это не смог вылечить, не помогло.
Дефайн должен быть выше всех includes в каждой из нужных единиц трансляции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.05.2022, 14:40
Помогаю со студенческими работами здесь

Сравнение mp3 файлов и нахождение различий
Собственно суть задачи - на вход подается два аудио файла в формате mp3 - это одна и та же запись с радиостанции, только одна является...

SysTracer Pro. Экспорт различий в фильтр
Сравниваю два снимка. Различий очень много. Нужно закинуть их в фильтр, чтобы в дальнейшем не мешали сравнению. Закидывается ветка...

Функция выявления различий между строками
Доброго всем здравия, духовного и телесного. Подскажите пожалуйста, есть ли функция, которая бы выделила различия при сравнивании строк? ...

Программа нахождения различий в файлах и проверки копии кодов
Кто может помочь? Нужна программа котора может проанализировав несколько файлов .C++ и вывести копии файлы или вывести на сколько...

Сравнение двух таблиц, и заполнение третьей на основании различий
Добрый день, прошу помочь с кодом для MySQL. Есть 3 таблицы: NewData; OldDara; DifData. Таблицы NewData и OldData имеют одинаковый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru