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

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

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

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

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

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

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

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

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

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

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

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

Компилить программу сразу из CMD - C++
Приветствую. У меня такая задача, собрать необходимую библиотеку для С++, которая бы позволила компилить программу сразу из CMD при...

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

26
CableGuy
14 / 14 / 1
Регистрация: 29.03.2012
Сообщений: 41
29.12.2012, 15:22 #2
C++
1
const int p;
0
Байт
Эксперт C
16534 / 10804 / 1637
Регистрация: 24.12.2010
Сообщений: 20,827
29.12.2012, 15:32 #3
Цитата Сообщение от CableGuy Посмотреть сообщение
C++
1
const int p;
А вот так
C
1
 BabFunc((int *)(&p));
не удастся ли обмануть? Или даже
C
1
 (int) p = 8;
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.12.2012, 15:43 #4
kravam, Средствами языка все же никак. Присвоение ведь идет не на этапе компиляция
0
Vladimir616
112 / 112 / 3
Регистрация: 05.07.2009
Сообщений: 224
29.12.2012, 15:49 #5
kravam, заблокировать присвоение переменной определённого значения до этапа компиляции конечно возможно (теоретически, с использованием интерпретатора), однако бессмысленно, т.к большинство программ получает данные извне, что невозможно контролировать на этапе компиляции. Если же ваша переменная не зависит от внешней среды и входных данных, то лучше, наверное, написать для неё специальный класс и перегрузить оператор присваивания, так будет гораздо проще
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.12.2012, 15:54 #6
Если переменной присваивается значение на стадии компиляции, то static_assert. Если в рантайме - assert.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.12.2012, 16:00 #7
diagon, static_assert соглашусь. assert - нет. первое - не этап компиляции, второе - только отладочный режим.
0
OhMyGodSoLong
29.12.2012, 16:00
  #8

Не по теме:

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

1
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
29.12.2012, 17:19 #9
не по теме, но как-то на защиту к нам зашел другой преподаватель, и когда я заговорил о константах, он сказал "а хочешь я докажу, что констант не существует?", правда я ответил "нет спасибо" и он не стал говорить, но, всё же, что он имел ввиду?
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.12.2012, 17:33 #10
Например, это.
Или это.
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.12.2012, 17:35 #11
diagon, а как же constexpr?
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.12.2012, 12:23 #12
Цитата Сообщение от kravam Посмотреть сообщение
он так кодит, что у него неправильный код просто-напросто не компилится, а я не стал уточнять.
А как он может скомпилиться?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 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;
}
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.12.2012, 12:46 #14
По языку здесь всё правильно, синтаксическую проверку прога пройдёт.
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
30.12.2012, 12:47 #15
Вот только функция не делает то, что должна делать.
0
30.12.2012, 12:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2012, 12:47
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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