Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
1

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

23.08.2012, 20:21. Просмотров 1108. Ответов 20
Метки нет (Все метки)

Почему компилятор не ругается, когда я исп. неинициализированную переменную и кладёт автоматически туда мусор. (см..коменатрий в коде):

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
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2012, 20:21
Ответы с готовыми решениями:

Почему компилятор ругается?
#include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;conio.h&gt; using namespace std;...

Почему ругается компилятор
#include &lt;iostream&gt; using namespace std; int main() { int a;...

Почему компилятор ругается на математическую функцию?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;cmath&gt; ...

Не понимаю почему ругается компилятор (давно не писала на С++)
FileSorter.h: #pragma once #include &lt;iostream&gt; #include &lt;fstream&gt; #include...

Почему компилятор ругается на использование шаблона (template)?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;chrono&gt;...

20
StasGamilton
Эксперт по пяченькам
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249
23.08.2012, 20:30 2
Ну если это был бы указатель, то он бы руганулся, а так это переменная - под нее память уже выделена, а что там лежит - это твое дело=)
0
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
23.08.2012, 20:34  [ТС] 3
А вы попробуйте вот так:
C++
1
2
3
4
void main(void){
        int a;
    std::cout << a;
}
Почему комп.вы этом случае тогда ругается???
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
23.08.2012, 20:36 4
какими словами точно ругается, сообщи.
0
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
23.08.2012, 20:40  [ТС] 5
Вот фото.
0
Миниатюры
почему компилятор не ругается?  
Evg
Эксперт CАвтор FAQ
19340 / 7194 / 537
Регистрация: 30.03.2009
Сообщений: 20,133
Записей в блоге: 30
23.08.2012, 20:46 6
Цитата Сообщение от bgm313 Посмотреть сообщение
Почему компилятор не ругается
Потому что стандартом сие НЕ запрещено. Любые адекватные компиляторы в таком случае выдают предупреждения, которые новички, как правило, нифига не читают
0
StasGamilton
Эксперт по пяченькам
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249
23.08.2012, 20:46 7
Ну не знаю как в визуал студио, но у меня норм скомпилировался пример с выводом а, плюс еще и отработал (показав мусор)
0
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
23.08.2012, 20:47 8
bgm313, Это вопрос к разработчикам VS. Вообще по сути использование не инициализированной переменной абсолютно корректно (кроме указателей, ссылок), другое дело, что результат такого использования не определен, собственно включив релиз версию проекта - увидите, что никаких ошибок нет.
0
zss
Модератор
Эксперт С++
7457 / 6834 / 4316
Регистрация: 18.12.2011
Сообщений: 18,079
Завершенные тесты: 1
23.08.2012, 20:54 9
Интересно, что если написать так
C++
1
ck2=ck^(i%2?argv[3][i]:(argv[3][i]+i*5)%255);
то сообщение о неинициализированной переменной ck выдается.
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
23.08.2012, 21:00 10
+
Цитата Сообщение от bgm313 Посмотреть сообщение
Вот фото.
и причем здесь компилятор? и что это за проект такой? небось снова этот инвалид манагед с--?
0
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
23.08.2012, 21:33  [ТС] 11
Цитата Сообщение от novi4ok Посмотреть сообщение
+
и причем здесь компилятор? и что это за проект такой? небось снова этот инвалид манагед с--?
А что такое проект инвалид манагед с--? Расскажите в чём он заключается?
0
alsav22
5444 / 4839 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.08.2012, 21:50 12
bgm313, на скрине у вас переменная 'a' используется до инициализации. И где она в коде?
0
bgm313
12 / 12 / 3
Регистрация: 27.07.2012
Сообщений: 208
23.08.2012, 21:57  [ТС] 13
Нет инициализации!
0
alsav22
5444 / 4839 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.08.2012, 22:25 14
Цитата Сообщение от bgm313 Посмотреть сообщение
Нет инициализации!
Это к чему?
0
Evg
Эксперт CАвтор FAQ
19340 / 7194 / 537
Регистрация: 30.03.2009
Сообщений: 20,133
Записей в блоге: 30
23.08.2012, 22:50 15
Цитата Сообщение от zss Посмотреть сообщение
Интересно, что если написать так
C++
1
ck2=ck^(i%2?argv[3][i]:(argv[3][i]+i*5)%255);
то сообщение о неинициализированной переменной ck выдается.
Скорее всего это ошибка (а точнее, недочёт) компилятора. Например, у тебя старый компилятор. Либо это какая-то особенность работы предупреждений в режиме без оптимизаций
0
Герц
526 / 343 / 12
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
24.08.2012, 00:08 16
и причем здесь компилятор? и что это за проект такой? небось снова этот инвалид манагед с--?
Там вообще-то черным по-белому написано что это ошибка времени выполнения C++. C++/CLI выводит сообщения в стандартной .Net'овской формочке.

Это run-time ошибка, так что ругается не компилятор, а C RunTime
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
24.08.2012, 00:33 17
Цитата Сообщение от bgm313 Посмотреть сообщение
А что такое проект инвалид манагед с--? Расскажите в чём он заключается?
какой темплейт выбирал при создании проекта?
0
Nikoys
26 / 26 / 17
Регистрация: 29.12.2010
Сообщений: 90
24.08.2012, 13:26 18
Цитата Сообщение от Evg Посмотреть сообщение
Скорее всего это ошибка (а точнее, недочёт) компилятора. Например, у тебя старый компилятор. Либо это какая-то особенность работы предупреждений в режиме без оптимизаций
Та ну, у человека Вижуалка 2010-го, я не думаю, что это старый компилятор)
0
Evg
Эксперт CАвтор FAQ
19340 / 7194 / 537
Регистрация: 30.03.2009
Сообщений: 20,133
Записей в блоге: 30
24.08.2012, 13:56 19
Цитата Сообщение от Nikoys Посмотреть сообщение
Та ну, у человека Вижуалка 2010-го, я не думаю, что это старый компилятор)
Значит коряво работает система выдачи предупреждений
0
CheshireCat
Эксперт С++
2913 / 1262 / 114
Регистрация: 27.05.2008
Сообщений: 3,464
24.08.2012, 14:32 20
Да нет, система выдачи предупреждений работает нормально.
Сработала самая обычная Runtime проверка, которую компилятор VC++ автоматически вставил в режиме отладки (Debug) - можно тот же самый код скомпилировать в релизе и убедиться, что никаких ошибок не будет.

Hint: компилятор VC++ еще с незапамятной версии в режиме отладки заполняет все неинициализированные переменные "магическим" значением 0xCC (или 0xCD - сейчас уже точно не помню, а проверять лень) [оно же типа 0xCCCCCCCC для многобайтный значений], а при использовании переменной в дебаге проверяет это значение, и если это значение сохранилось (т.е. переменная не инициализирована) - срабатывает Debug Assertion - Failed. Вот и весь фокус :-)
0
24.08.2012, 14:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2012, 14:32

Почему компилятор ругается на то, что класс не объявлен при использовании оператора если?
......... if (i &lt; 3) { int b, c; cin &gt;&gt; b &gt;&gt; c; ...

Multiple definition: почему компилятор ругается на единственную функцию, используемую в обоих source-файлах?
Пихаю хедер в 2 сурсца разных классов. Компилятор ругается на единственную...

ругается компилятор:
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;process.h&gt; #include...


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

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

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