VS C ++ 2008: изменение выходного текста? - PullRequest
0 голосов
/ 20 февраля 2010

Я использую Visual Studio C ++ 2008 Express Edition.

Можно ли изменить текст на панели вывода для ошибок компиляции (или других)?

Например, я могу получить сообщение об ошибке: ошибка C2556: int Class :: getResult (void) + намного больше относительного мусора.

Я могу анализировать выводимый текст, легко находить и исправлять свои ошибки. Было бы неплохо / полезно, если бы я мог изменить ошибки, чтобы они были чище, короче и дружелюбнее. В качестве примера можно было бы получить сообщение об ошибке: «Source.cc (строка 10): отсутствует закрытие;»

Ответы [ 2 ]

3 голосов
/ 20 февраля 2010

Есть несколько вещей, которые вы должны понять. Компилятор действительно делает все возможное; он говорит вам, где именно он потерпел неудачу, и всю компиляцию вплоть до этого момента. Он не знает, что вы намеревались написать, он знает, что вы написали, так как он может предположить, что ошибка была вызвана чем-то более удаленным? Я думаю, что если бы вы писали это и подошли к тому, чтобы делать ошибки «чище, короче и дружелюбнее», вы бы поняли, что это гораздо сложнее, чем может показаться.

Бывают ситуации, когда он может это сделать, и компиляторам кажется, что им лучше предлагать их. Например это:

if (x);
{
    x = 5;
}

Выдает предупреждение:

предупреждение C4390: ';' : найдено пустое контролируемое утверждение; это намерение?

Но они не всегда могут это сделать.

Тем не менее, сообщения об ошибках - это действительно все, что вам нужно для решения проблемы, как только вы немного изучите язык и поймете, что все это значит. Я думаю, что это огромный миф и преувеличение, что ошибки шаблона являются «злыми и загадочными». Хотя они могут быть многословными, их на самом деле совсем не сложно понять. Я не думаю, что ошибки шаблона являются загадочными, я думаю, что читатель не знает, как правильно его читать, что делает его загадочным. Но если вы не торопитесь, вы точно видите, что он пытался сделать, и где он потерпел неудачу.

В следующем стандарте, C ++ 0x, должна была появиться вещь, называемая «понятиями», которая очень сильно это исправит. Они были чем-то вроде тегов, в которые могли бы вписаться классы, если бы они поддерживали все, что, по словам тега, они должны были. Таким образом, в std::copy вместо ошибок, связанных с невозможностью вызова operator= для чего-либо, наряду с распространяющимися ошибками, вы просто получите что-то вроде «Ошибка: Тип не CopyAssignable», и это будет так. Та же ошибка, другая презентация. И это также причина, по которой их сейчас отключили. они оказались проблемой, и так как это был синтаксический сахар в любом случае, более важно работать над другими вещами. Надеюсь, мы увидим их когда-нибудь.

Теперь есть инструмент под названием STLFilt , который будет фильтровать ошибки шаблона, касающиеся вещей в STL. Я никогда не использовал это, но я слышал, что это рекомендуется не раз. Вот один из их образцов фильтров . Вы можете попробовать.


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

Вы найдете то, что я имею в виду в стандарте в разделе 1.4 / 2. Подводя итог, он в основном говорит: «Если есть ошибка, выведите что-нибудь об этом». Вот и все.

0 голосов
/ 20 февраля 2010

Довольно легко сделать лучший снимок этой проблемы. Сам компилятор является программой командной строки с именем cl.exe. Если вы хотите отфильтровать вывод, вам нужно создать программу с именем cl.exe. Необходимо будет передать все аргументы командной строки в исходный cl.exe. Затем он возьмет все, что исходное сообщение генерирует в виде сообщений на своем стандартном выходе, проанализирует их, заменит их сообщениями, которые вы предпочитаете, и напечатает их на свой собственный стандартный вывод.

Когда вы сделаете это, вы, вероятно, захотите как минимум сохранить информацию о файле и строке, в которой возникла проблема, в исходном формате. Среда IDE анализирует и использует ее для поддержки навигации по ошибкам (например, с помощью клавиши F4 или двойного щелчка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...