Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
#1

Ошибка компиляции как положительный результат - C++

09.08.2012, 19:45. Просмотров 1883. Ответов 20

Товарищи, подскажите, пожалуйста, есть ли возможность средствами плюсов следить за ошибками компиляции?

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

Если средствами плюсов такое сделать не получится (что вероятнее всего), то как можно попроще это реализовать внешними инструментами?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2012, 19:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка компиляции как положительный результат (C++):

Ошибка компиляции - C++
Дана задача с использованием friend-ов. Не могу понять почему программа не видит (Square s(5, 4);) Помогите пожалуйста чайнику) ...

Ошибка компиляции ассемблерной вставки - C++
Добрый вечер. Захотелось мне сделать ассемблерную вставку в C++ код. Сделал. Но компилятору MinGW чето не нравится. Выдает следующие ошибки...

Ошибка сегментирования при компиляции - C++
Когда компилирую через g++ компилируется, при запуске выдает ошибку сегментирования, а при компиляции через NetBeans IDE выдает две ошибки,...

Ошибка компиляции - C++ Builder
Доброго времени суток, недоустановил компонент до конца и начались глюки выдаёт такую ошибку

Ошибка компиляции - C++ Builder
Помогите, не могу понять в чем проблема. При компиляции вылетает ошибка: "First chance excaption at $775142EB. Exceprion class...

Ошибка компиляции - C++ Builder
при компиляции выскакивает ошибка: undefined symbol 'memo1'....в последней строке кода...в чём ошибка? вот код: #include <vcl.h> ...

20
Evg
Эксперт CАвтор FAQ
18040 / 6272 / 428
Регистрация: 30.03.2009
Сообщений: 17,248
Записей в блоге: 28
10.08.2012, 08:31 #16
Цитата Сообщение от volovzi Посмотреть сообщение
Ну да, видимо, придётся писать скрипты на баше, которые будут сначала генерировать плюсовый код, а потом несколько раз компилировать его с разными значениями макроса.
gnu'шники используют некоторую наноутилиту dejagnu. Она предназначена для того, чтобы компилировать и исполнять разнородные тесты, используя только один пусковой скрипт. Я никогда ею не пользовался, но сводится оно примерно к следующему. В текст программы вносятся комментарии, внутри которых на птичьем языке вводятся команды для dejagnu, по которым он понимает, с какими опциями надо компилировать программу, с какими аргументами запускать, что она должна печатать. Почитай к ней описание, может и для твоего случая можно будет её применить.

Пример на пальцах. Возможно, он некорректный, но я просто поясню суть, для чего оно надо.

C
/* { dg-flags "-DQQQ" } */
/* { dg-args "-arg1 -arg2" } */
/* { dg-output "abc" } */
/* { dg-output "def" } */
 
#ifndef QQQ
#error "qqq"
#endif
 
int main (int argc, char **argv)
{
  while (argv != NULL)
    {
      if ( !strcmp (argv, "-arg1"))
        printf ("abc\n");
      else if ( !strcmp (argv, "-arg2"))
        printf ("def\n");
 
      argv++;
    }
}
Если отдать утилите dejagnu этот тест, то она скомпилирует его при помощи опции -DQQQ, далее запустит его с аргументами "-arg1 -arg2" и по окончании проверит, что скрипт напечатал на экран "abc\ndef\n".
1
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
10.08.2012, 14:03  [ТС] #17
Evg, насколько я понимаю, эта утилита всё-таки предназначена для запуска тестов. А мне запуск вообще не требуется, меня интересует только компиляция, и то в половине случаев меня интересует падение при компиляции .
Но спасибо за информацию.
0
Evg
Эксперт CАвтор FAQ
18040 / 6272 / 428
Регистрация: 30.03.2009
Сообщений: 17,248
Записей в блоге: 28
10.08.2012, 14:57 #18
Цитата Сообщение от volovzi Посмотреть сообщение
Evg, насколько я понимаю, эта утилита всё-таки предназначена для запуска тестов
А что мешает сделать вид, что ты запускаешь тест?

В качестве компилятора подсовываешь скрипт, который, грубо говоря, запускает gcc с перенаправлением его вывод в файл a.txt, и в конечном итоге скрипт создаёт файл a.out, в котором написано "cat a.txt". Далее dejagnu запускает файл a.out, думая, что он получен компилятором, фильтрует его выдачу, думая, что это выдача от теста

Добавлено через 56 секунд
Т.е. мы делаем вид, что используем dejagnu по прямому назначению, но используем его для других целей
1
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
10.08.2012, 15:11  [ТС] #19
Да, спасибо, подумаю.
0
Виктор_Сен
33 / 26 / 1
Регистрация: 01.08.2011
Сообщений: 176
15.03.2015, 17:22 #20
Если это во время компиляции, я представлял бы такое как условную компиляцию. Если один блок кода вызывает ошибку, то вместо него подставляется другой блок кода. Компиляция успешна, если хотя бы один из блоков не вызвал ошибку компиляции. Ну и во втором блоке можно сделать какую-то дополнительную работу, связанную с успешным выполнением негативного теста.
0
Виктор_Сен
33 / 26 / 1
Регистрация: 01.08.2011
Сообщений: 176
21.03.2015, 12:59 #21
Автору вопроса это скорее всего уже не актуально. Но может кому-нибудь пригодится. Не могу утверждать, что достаточно хорошо разбираюсь в метафункциях, и что это решает вопрос, но мне интересно узнать мнение экспертов. Недавно столкнулся с такой проблемой. Нужно определить, существует ли шаблон с определёнными параметрами. То есть если записать шаблон с определёнными параметрами, корректна ли эта запись с точки зрения компилятора. И мне после долгих мучений удалось разрешить эту задачу. Я использовал следующие статьи с хабра:http://habrahabr.ru/post/205772/ http://habrahabr.ru/post/54762/ http://habrahabr.ru/post/206458/. Проверял в VS 2012, кстати, он не поддерживает "constexpr", но у меня всё нормально работало со "static const". Минимально возможный код по объёму для метафункции проверки корректности шаблона, который мне удалось получить:
C++
1
2
3
4
5
6
7
8
9
        template<typename T> struct _type_is_correct
        {
        private:
            static bool test_func(T t);
            static void test_func(...);
        public:
            static const bool value=
                std::is_same<bool,decltype(test_func(std::declval<T>()))>::value;
        };
Далее, это можно использовать как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
template<typename T, typename E=void> class SomeClass;
template<typename T> class SomeClass<T,typename std::enable_if<std::is_integral<T>::value>::type>
{
 
};
 
int main()
{
    if (_type_is_correct<SomeClass<int>>::value)
    {
        std::cout<<"SomeClass<int> is correct"<<std::endl;
    } 
    else
    {
        std::cout<<"SomeClass<int> is not correct"<<std::endl;
    }
 
    if (_type_is_correct<SomeClass<float>>::value)
    {
        std::cout<<"SomeClass<float> is correct"<<std::endl;
    } 
    else
    {
        std::cout<<"SomeClass<float> is not correct"<<std::endl;
    }
 
    system("pause");
    return 0;
}
0
21.03.2015, 12:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2015, 12:59
Привет! Вот еще темы с ответами:

Ошибка компиляции - C++ Builder
#include &lt;iostream.h&gt; #include...

Ошибка при компиляции - C++ Builder
Приветствую всех, все работало хорошо, но при добавлении Label2 нажал на него 2 раза, соотв. у Unit1 появился код на событие OnClick,...

Ошибка при компиляции - C++ Builder
Не пойму, что случилось с моим 2009 билдером (CodeGear C++ Builder 2009)... Все работало отлично, но в один прекрасный день - перестало....

Результат компиляции - C++
Скажите, в какой язык компилируются современные программы написанные на с/с++? И какие языки понимает х86 пк? Как я подозреваю - ассемблер.


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru