VisualC++ неуловимый "баг".

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Ins3t, 19 Jun 2010.

  1. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Выделил из темы "С\С++ ...", дабы не оффтопить.

    Собственно введу в курс дела. Некоторые товарищи считают, что есть в компиляторе VisualC++ некий "глюк", который заключается в том, что у операторе множественного выбора switch не происходит выход после первого break. То есть так не выходит из switch:
    Code:
    ...
            cin >> var;
    
    	switch ( var )
    	{
    		case 1:
    			cout << "OK!";
    		case 2:
    			break;
    	}
    ...
    
    А так выходит:

    Code:
    ...
            cin >> var;
    
    	switch ( var )
    	{
    		case 1:
    			cout << "OK!";
    		case 2:
    			break;
                            break;
    	}
    ...
    
    Отпишите, пожалуйста, у кого есть подобные "глюки".



    Если есть что сказать - можете писать сюда. Но лично мне, исходя из проведенных тестов, ясно, что нету в компиляторе глюка.
     
    #1 Ins3t, 19 Jun 2010
    Last edited: 19 Jun 2010
    2 people like this.
  2. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    еще интересует стояло что либо из аддонов. возможно не срабатывал сейв сорца. Сколько примерно студия работала без перезапуска до появления бага.
     
  3. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    У меня, в 2010 именно так и было.
    После повторной компиляции все стало вери гут.
     
  4. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Нам не верят ))) Мы - опенсорсные лазунчики ))))

    Только у меня это проявлялось на 2008.
     
    1 person likes this.
  5. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    када такая бага - ставьте бряк на на код перед брейком и попробуйте потрейсить. Еще лучше нажать Debug -> Windows -> Disassembly и скинуть сорец сюда. Очень интересно понять откуда ноги растут. В ошибку компиля не верю. Сталобыть либо баг студии, либо баг в венде, типа не сейвится файл например. Ибо перекомпиляция принудительно заставляет ресейвить модифицированные файлы.

    [added]
    Та причем тут опенсорс. Я периодически кодю в QtCreator. Интересен вопрос бага.
     
    #5 Ra$cal, 19 Jun 2010
    Last edited: 19 Jun 2010
  6. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Кстати, такая же проблема встречалась в случае с getchar();
    Данная команда тупо пропускалась и не было никакого ожидания клавиши.

    или getch(); ..... не помню уже точно...
     
  7. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    +
    И опять же в цикле.
     
  8. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    хм. интересно. аверы есть? проактивка? всегда ли пропускал в цикле? т.е. цикл есть, но ниразу не стопорицо, либо цикл есть, бывает что сопорнется, бывает что нет, в течение одного запуска программы.
     
  9. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Протестировал это же в студии 2010, ничего. Код:
    Code:
    	while( var != -1 )
    		{
    
    		switch ( var )
    		{
    			case 1:
    				cout << "OK!";
    			case 2:
    				var = -1;
    				break;
    			default:
    				cout << "defaultText";
    		}
    	
    	cout << "EXITING!";
    		}
    
    С getchar() это не совсем проблема. Ты наверняка перед вызовом гетчара вызывал функцию по типу scanf():
    Code:
    	scanf( "%d", &var );
    
    Ты ввел число и нажал на энтер. В итоге твое число записалось в var, а символ перевода строки так и остается в сканфе. И после вызова getchar() ему передается этот символ перевода строки. Как то так.
     
  10. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Да, наверное, именно так и было. Не помню уже. Тут ты полностью прав.
     
  11. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Баг скорее всего в коде, а не в компиляторе.
    Отключайте оптимизацию кода.