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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
#1

Как заставить компилятор не компилить неправильную программу? - C++

29.12.2012, 14:56. Просмотров 1127. Ответов 26
Метки нет (Все метки)

Мне не даёт покоя разговор с одним программистом, имевший место быть несколько лет назад. Тот сказал, что он так кодит, что у него неправильный код просто-напросто не компилится, а я не стал уточнять. Многое я бы отдал, чтобы вернуться к тому разговору!

Ясно дело, что даже если это и правда, то правда условная. Компилятор же не знает, что нужно человеку. Тем не мене, может есть какие-то способы ограничить поведение (предотвратить его) программы на стадии компиляции при синтаксически правильном коде? Будем здесь их обсуждать. Начнём с простого.

C++
1
2
3
4
5
6
7
8
9
10
int main () {
 int p;
 
 //есть ли способ сделать так, чтобы 
 //компилятор  ругался на присвоение
 //(ЛЮБЫМ способом) переменной p
 //определённого значения, например, 7?
 returtn 0;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2012, 14:56     Как заставить компилятор не компилить неправильную программу?
Посмотрите здесь:

есть ли компилятор для андроида? на планшете хочу компилить - C++
или процессор в планшете не поддержит мою идею?

Как компилить программу с libjpeg? - C++
Я не понимаю, как компилить программу с libjpeg, если я использую Visual Studio. Г* командная строка - не находит nmake.

Как заставить компилятор выводить имя файла? - C++
Всем привет! Компилятор GCC. Из Readme: Проблема вот в чем. Создал батник, для экономии действий, следующего содержания: ...

Как заставить компилятор давать имена символам, соответствующие названиям функций? - C++
Здравствуйте! Пишу динамическую библиотеку, в которой имплементирую функцию run() - эта функция должна вызываться потом сторонним...

Как компилить x64? - C++
У меня почему то sizeof(size_t)==4, а система windows 7 x64. Как с этим бороться?

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

Как заставить программу выбирать наибольшие число? - C++
Нужно было сделать программу которая запрашивает 5 чисел и выбирает наибольшие и наименьшие число. С запросом чисел все понятно, но вот как...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CableGuy
14 / 14 / 1
Регистрация: 29.03.2012
Сообщений: 41
29.12.2012, 15:22     Как заставить компилятор не компилить неправильную программу? #2
C++
1
const int p;
Байт
Эксперт C
15840 / 10167 / 1522
Регистрация: 24.12.2010
Сообщений: 19,167
29.12.2012, 15:32     Как заставить компилятор не компилить неправильную программу? #3
Цитата Сообщение от CableGuy Посмотреть сообщение
C++
1
const int p;
А вот так
C
1
 BabFunc((int *)(&p));
не удастся ли обмануть? Или даже
C
1
 (int) p = 8;
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.12.2012, 15:43     Как заставить компилятор не компилить неправильную программу? #4
kravam, Средствами языка все же никак. Присвоение ведь идет не на этапе компиляция
Vladimir616
112 / 112 / 3
Регистрация: 05.07.2009
Сообщений: 224
29.12.2012, 15:49     Как заставить компилятор не компилить неправильную программу? #5
kravam, заблокировать присвоение переменной определённого значения до этапа компиляции конечно возможно (теоретически, с использованием интерпретатора), однако бессмысленно, т.к большинство программ получает данные извне, что невозможно контролировать на этапе компиляции. Если же ваша переменная не зависит от внешней среды и входных данных, то лучше, наверное, написать для неё специальный класс и перегрузить оператор присваивания, так будет гораздо проще
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.12.2012, 15:54     Как заставить компилятор не компилить неправильную программу? #6
Если переменной присваивается значение на стадии компиляции, то static_assert. Если в рантайме - assert.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.12.2012, 16:00     Как заставить компилятор не компилить неправильную программу? #7
diagon, static_assert соглашусь. assert - нет. первое - не этап компиляции, второе - только отладочный режим.
OhMyGodSoLong
29.12.2012, 16:00
  #8

Не по теме:

Использовать Haskell.

Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
29.12.2012, 17:19     Как заставить компилятор не компилить неправильную программу? #9
не по теме, но как-то на защиту к нам зашел другой преподаватель, и когда я заговорил о константах, он сказал "а хочешь я докажу, что констант не существует?", правда я ответил "нет спасибо" и он не стал говорить, но, всё же, что он имел ввиду?
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.12.2012, 17:33     Как заставить компилятор не компилить неправильную программу? #10
Например, это.
Или это.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.12.2012, 17:35     Как заставить компилятор не компилить неправильную программу? #11
diagon, а как же constexpr?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.12.2012, 12:23     Как заставить компилятор не компилить неправильную программу? #12
Цитата Сообщение от kravam Посмотреть сообщение
он так кодит, что у него неправильный код просто-напросто не компилится, а я не стал уточнять.
А как он может скомпилиться?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
30.12.2012, 12:44     Как заставить компилятор не компилить неправильную программу? #13
Цитата Сообщение от taras atavin Посмотреть сообщение
А как он может скомпилиться?
Легко. Вот это неправильный код, реализующий умножение двух чисел:
C++
1
2
3
4
int mul(int a, int b)
{
    return a + b;
}
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.12.2012, 12:46     Как заставить компилятор не компилить неправильную программу? #14
По языку здесь всё правильно, синтаксическую проверку прога пройдёт.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2012, 12:47     Как заставить компилятор не компилить неправильную программу?
Еще ссылки по теме:

Как заставить программу использовать больше ресурсов процессора? - C++
Возможно ли вообще, в принципе, заставить программу использовать больше ресурсов процессора? Как видите, она использует только 13%,...

Как заставить программу не выгружаться из памяти и работать дальше? - C++
Возьмем банальный пример клавиатурный шпион или чтонить в этом роде... Проект Win32 application я разместил в конце ВинМайн цикл...

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

Как добиться возможности компилить с поддержкой нового стандарта в Code Blocks (MinGW)? - C++
Народ как добиться возможности компилить с поддержкой нового стандарта ?

Как заставить программу заново запускаться после окончания всех действий? - C++
Код: #include <iostream> #include <cstdlib> using namespace std; main () { string a,b,c,d; cout <<"I have a"; cin >>a; ...


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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
30.12.2012, 12:47     Как заставить компилятор не компилить неправильную программу? #15
Вот только функция не делает то, что должна делать.
Yandex
Объявления
30.12.2012, 12:47     Как заставить компилятор не компилить неправильную программу?
Ответ Создать тему
Опции темы

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