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

почему компилятор не ругается? - C++

Восстановить пароль Регистрация
 
 
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
23.08.2012, 20:21     почему компилятор не ругается? #1
Почему компилятор не ругается, когда я исп. неинициализированную переменную и кладёт автоматически туда мусор. (см..коменатрий в коде):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 FILE* fp,*fo;
 unsigned char key[16];    
 unsigned char ck;           
 unsigned char buf[16];
 int i,n;
 
 if(argc!=4)
 {
    return 0;
 }
 
 n = strlen(argv[3]);
 
 
 for(i=0;i<n;i++)
     ck^=i%2?argv[3][i]:(argv[3][i]+i*5)%255; //использование неинициализированной переменной ck
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2012, 20:21     почему компилятор не ругается?
Посмотрите здесь:

C++ компилятор ругается помогите
Почему компилятор ругается? C++
Ругается компилятор C++
ругается компилятор: C++
Ругается компилятор C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
StasGamilton
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
23.08.2012, 20:30     почему компилятор не ругается? #2
Ну если это был бы указатель, то он бы руганулся, а так это переменная - под нее память уже выделена, а что там лежит - это твое дело=)
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
23.08.2012, 20:34  [ТС]     почему компилятор не ругается? #3
А вы попробуйте вот так:
C++
1
2
3
4
void main(void){
        int a;
    std::cout << a;
}
Почему комп.вы этом случае тогда ругается???
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
23.08.2012, 20:36     почему компилятор не ругается? #4
какими словами точно ругается, сообщи.
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
23.08.2012, 20:40  [ТС]     почему компилятор не ругается? #5
Вот фото.
Миниатюры
почему компилятор не ругается?  
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
23.08.2012, 20:46     почему компилятор не ругается? #6
Цитата Сообщение от bgm313 Посмотреть сообщение
Почему компилятор не ругается
Потому что стандартом сие НЕ запрещено. Любые адекватные компиляторы в таком случае выдают предупреждения, которые новички, как правило, нифига не читают
StasGamilton
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
23.08.2012, 20:46     почему компилятор не ругается? #7
Ну не знаю как в визуал студио, но у меня норм скомпилировался пример с выводом а, плюс еще и отработал (показав мусор)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
23.08.2012, 20:47     почему компилятор не ругается? #8
bgm313, Это вопрос к разработчикам VS. Вообще по сути использование не инициализированной переменной абсолютно корректно (кроме указателей, ссылок), другое дело, что результат такого использования не определен, собственно включив релиз версию проекта - увидите, что никаких ошибок нет.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
23.08.2012, 20:54     почему компилятор не ругается? #9
Интересно, что если написать так
C++
1
ck2=ck^(i%2?argv[3][i]:(argv[3][i]+i*5)%255);
то сообщение о неинициализированной переменной ck выдается.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
23.08.2012, 21:00     почему компилятор не ругается? #10
+
Цитата Сообщение от bgm313 Посмотреть сообщение
Вот фото.
и причем здесь компилятор? и что это за проект такой? небось снова этот инвалид манагед с--?
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
23.08.2012, 21:33  [ТС]     почему компилятор не ругается? #11
Цитата Сообщение от novi4ok Посмотреть сообщение
+
и причем здесь компилятор? и что это за проект такой? небось снова этот инвалид манагед с--?
А что такое проект инвалид манагед с--? Расскажите в чём он заключается?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.08.2012, 21:50     почему компилятор не ругается? #12
bgm313, на скрине у вас переменная 'a' используется до инициализации. И где она в коде?
bgm313
12 / 12 / 2
Регистрация: 27.07.2012
Сообщений: 208
23.08.2012, 21:57  [ТС]     почему компилятор не ругается? #13
Нет инициализации!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.08.2012, 22:25     почему компилятор не ругается? #14
Цитата Сообщение от bgm313 Посмотреть сообщение
Нет инициализации!
Это к чему?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
23.08.2012, 22:50     почему компилятор не ругается? #15
Цитата Сообщение от zss Посмотреть сообщение
Интересно, что если написать так
C++
1
ck2=ck^(i%2?argv[3][i]:(argv[3][i]+i*5)%255);
то сообщение о неинициализированной переменной ck выдается.
Скорее всего это ошибка (а точнее, недочёт) компилятора. Например, у тебя старый компилятор. Либо это какая-то особенность работы предупреждений в режиме без оптимизаций
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
24.08.2012, 00:08     почему компилятор не ругается? #16
и причем здесь компилятор? и что это за проект такой? небось снова этот инвалид манагед с--?
Там вообще-то черным по-белому написано что это ошибка времени выполнения C++. C++/CLI выводит сообщения в стандартной .Net'овской формочке.

Это run-time ошибка, так что ругается не компилятор, а C RunTime
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.08.2012, 00:33     почему компилятор не ругается? #17
Цитата Сообщение от bgm313 Посмотреть сообщение
А что такое проект инвалид манагед с--? Расскажите в чём он заключается?
какой темплейт выбирал при создании проекта?
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
24.08.2012, 13:26     почему компилятор не ругается? #18
Цитата Сообщение от Evg Посмотреть сообщение
Скорее всего это ошибка (а точнее, недочёт) компилятора. Например, у тебя старый компилятор. Либо это какая-то особенность работы предупреждений в режиме без оптимизаций
Та ну, у человека Вижуалка 2010-го, я не думаю, что это старый компилятор)
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
24.08.2012, 13:56     почему компилятор не ругается? #19
Цитата Сообщение от Nikoys Посмотреть сообщение
Та ну, у человека Вижуалка 2010-го, я не думаю, что это старый компилятор)
Значит коряво работает система выдачи предупреждений
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2012, 14:32     почему компилятор не ругается?
Еще ссылки по теме:

C++ Компилятор не ругается
C++ Почему ругается компилятор
Компилятор ругается C++

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

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
24.08.2012, 14:32     почему компилятор не ругается? #20
Да нет, система выдачи предупреждений работает нормально.
Сработала самая обычная Runtime проверка, которую компилятор VC++ автоматически вставил в режиме отладки (Debug) - можно тот же самый код скомпилировать в релизе и убедиться, что никаких ошибок не будет.

Hint: компилятор VC++ еще с незапамятной версии в режиме отладки заполняет все неинициализированные переменные "магическим" значением 0xCC (или 0xCD - сейчас уже точно не помню, а проверять лень) [оно же типа 0xCCCCCCCC для многобайтный значений], а при использовании переменной в дебаге проверяет это значение, и если это значение сохранилось (т.е. переменная не инициализирована) - срабатывает Debug Assertion - Failed. Вот и весь фокус :-)
Yandex
Объявления
24.08.2012, 14:32     почему компилятор не ругается?
Ответ Создать тему
Опции темы

Текущее время: 13:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru