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

Баги в Visual Studio 2010 - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
Сыроежка
Заблокирован
16.10.2011, 19:17     Баги в Visual Studio 2010 #1
Цитата Сообщение от Van111 Посмотреть сообщение
спасибо Nameless One
если честно то в 6 студии куча глюков, а на 2010 я переходить не хочу она вроде как слишком большие exe создают но ради удобства RAD можно и её заняться
а если я обычные проги буду на dev 5 писать они сильно в скорости выполнения будут 6 студии уступать??????????
В MS VC++ 2010 также не мало глюков! Другое дело, что у вас не такая высокая квалификация, чтобы понять, что вы имеете дело с глюком.

Самый простой глюк MS VC++ 2010 (правда я обнаружил его до установки обновления SP1, так что не знаю, исправлен он уже или нет), это не возможность совершенно корректного определения

C++
1
2
3
4
struct A
{
   int A;
};
 Комментарий модератора 
Сообщения выделены из темы испортился компилятор посмотрите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 19:17     Баги в Visual Studio 2010
Посмотрите здесь:

C++ Visual Studio 2010
C++ Visual Studio 2010
C++ Visual Studio 2010
C++ c++, visual studio 2010! 1.
c++, visual studio 2010! 2. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
16.10.2011, 21:12     Баги в Visual Studio 2010 #21
пример с классом, тоже не скомпилируется в msvc 2010.
и это явно трудно назвать багом.
потому что конструктор всеравно создается.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.10.2011, 21:22     Баги в Visual Studio 2010 #22
Цитата Сообщение от Сыроежка Посмотреть сообщение
На мой взгляд одноименное имя члена структуры должно скрывать имя структуры.
Считаю ваш взгляд ошибочным, идентификатор обявленый внутри пространства { } с таким же именем как и внешний, да должен скрывать, но только внутри этого же или дочернего пространства. В данном случае пространство структуры { } равнозначно пространству main { }

Добавлено через 7 минут
это я к тому что в main писать struct необязательно, в C++ естественно
Цитата Сообщение от Сыроежка Посмотреть сообщение
то есть объявление в main объекта структуры должно уже писаться в виде
C++
1
struct A a;
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.10.2011, 21:23     Баги в Visual Studio 2010 #23
Цитата Сообщение от silentnuke Посмотреть сообщение
пример с классом, тоже не скомпилируется в msvc 2010.
и это явно трудно назвать багом.
потому что конструктор всеравно создается.
Ну вот как-то умудряется gcc это компилировать. Но вот так уже не будет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
class A
{
    int A;
public:
   A(int _A = 0) {
        this->A = _A;
    }
   int get() const { return this->A; }
};
 
int main(){
    A a(13);
    
    std::cout << a.get() << std::endl;
    
    return 0;
}
Код
andrew@debnout:~/cpp/other$ g++ -o aa aa.cpp 
aa.cpp:5: error: field ‘int A::A’ with same name as class
silentnuke
16.10.2011, 21:27
  #24

Не по теме:

easybudda, microsoft заботиться о вас

Сыроежка
Заблокирован
17.10.2011, 18:10  [ТС]     Баги в Visual Studio 2010 #25
Цитата Сообщение от easybudda Посмотреть сообщение
Ну да. Говорю же - показать, что в принципе такое работает.


Вот с этим не поспоришь!



Это баг языка С++, в нём при объявленной
C++
1
struct A {/*...*/};
объявления
C++
1
struct A a;
и
C++
1
A a;
практически одно и то же. То, что в структуре имеется одноимённое поле, на правила объявления объектов структуры никаким боком не влияет. Мало того, вот по сути тоже самое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
class A
{
public:
   int A;
};
 
int main(){
    A a;
    a.A = 13;
    
    std::cout << a.A << std::endl;
    
    return 0;
}
Добавлено через 1 минуту

Нет, в С так работать не будет. Там обязательно либо писать struct A a; либо с помощью typedef соответствующий тип объявлять.
Увы, я лишь могу константировать, что вы не знаете С++!

Объявления

C++
1
struct A a;
и

C++
1
A a;
Это не одно и то же, как вы по своему незнанию С++ думаете.

Для примера возьмите простой код

C++
1
2
3
struct A {};
 
void A() {}
и попробуйте теперь объявить объект класса A, используя объявление A a, которое, вы считаете, ничем не отличается от объявления struct A a. И не надо фантазировать, что объявление члена структуры с таким же именем ни на что не влияет! Во-первых, это можно делать при условии, если не объявлен конструктор класса. Во-вторых, это не С, и имя члена должно скрывать имя класса. В этом случае для класса используется уточненное имя.

Я уже показал, что в MS VC++ 2010 имеется баг. Очевидно, что и в g++ имеется баг только другого рода.

Ладно, оставим эту тему. Вам явно не хватает знаний в этой части языка С++. Лучше загляните на [ссылка удалена] Там открылся раздел по С/С++, и я создал интересную тему. Там понадобиться ваша помощь, так как вы используете g++ и сможете проверить, действительно ли тот пример кода компилируется с g++, или это ошибочное утверждение. Буду ждать там ваших комментарий. Тот вопрос также на понимание С++.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.10.2011, 18:19     Баги в Visual Studio 2010 #26
ОМГ, ОМГ, невозможно писать код вида struct A{ int A; }; .(((( Удаляю студию!
Сыроежка
Заблокирован
17.10.2011, 18:22  [ТС]     Баги в Visual Studio 2010 #27
Цитата Сообщение от Deviaphan Посмотреть сообщение
ОМГ, ОМГ, невозможно писать код вида struct A{ int A; }; .(((( Удаляю студию!
Если бы это был бы один баг, то можно было бы оставить студию. Но проблема в том, что, например, лично я уже обнаружил 5 багов. И некоторые из них достаточно серьезны, что могут не позволить использовать корректный код.

g++, похоже, тоже имеет не меньше багов. По крайней мере в том вопросе, ссылку на который я сделал, корректность g++ ставится под сомнение.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.10.2011, 18:33     Баги в Visual Studio 2010 #28
Цитата Сообщение от Сыроежка Посмотреть сообщение
лично я уже обнаружил 5 багов.
Пользуюсь около года. Никаких проблем не возникало. ~50К строк кода унаследованных с 2005 студии.
Видимо, проблема в плохом стиле кодирования.)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.10.2011, 18:37     Баги в Visual Studio 2010 #29
Цитата Сообщение от Сыроежка Посмотреть сообщение
Увы, я лишь могу константировать, что вы не знаете С++!
Да что там я. Думаю, его кроме Вас вообще никто не знает. Ну Страуструпп разве-что в общих чертах...

Цитата Сообщение от Сыроежка Посмотреть сообщение
Для примера возьмите простой код
Ну да, так конечно ругаться будет. Так оно и в таком виде не скомпилируется
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
    
class A {
public:
    int val;
};
 
void A() {
    std::cout << "bla bla bla" << std::endl;
}
 
int main(){
    A a;
    a.val = 13;
    
    A();
    std::cout << a.val << std::endl;
    
    return 0;
}
скажет
Код
C:\c_cpp\shitcode>g++ -o aa aa.cpp
aa.cpp: In function 'int main()':
aa.cpp:13:4: error: expected ';' before 'a'
aa.cpp:14:2: error: 'a' was not declared in this scope
что не удивляет. Мне другое не понятно: зачем вообще такие грабли делать? Тру-профессионалу обычных проблем с ошибками в программе мало, дебажить, так дебажить? Это если ССЗБ, или просто заняться нечем по-моему...

Цитата Сообщение от Сыроежка Посмотреть сообщение
Вам явно не хватает знаний в этой части языка С++. Лучше загляните на [ссылка удалена] Там открылся раздел по С/С++, и я создал интересную тему. Там понадобиться ваша помощь, так как вы используете g++ и сможете проверить, действительно ли тот пример кода компилируется с g++, или это ошибочное утверждение. Буду ждать там ваших комментарий. Тот вопрос также на понимание С++.
Во-первых прочитайте уже правила, там кроме уважительного общения (я-то не претендую, но многие обижаются) есть ещё пункт
Запрещено публиковать ссылки на другие форумы.
, а во-вторых что мне, неучу, там делать? Нужно посмотреть, как с вашими шарадами gcc справится - так скачайте, установите и сами посмотрите...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.10.2011, 18:49     Баги в Visual Studio 2010 #30
Цитата Сообщение от easybudda Посмотреть сообщение
A();
Эту строку никакой компилятор не сможет интерпретировать правильно, потому что не сможет отличить вызов функции от создания локального объекта. Но, разумеется, это баг компилятора, а не косяк программиста.)
Сыроежка
Заблокирован
17.10.2011, 18:49  [ТС]     Баги в Visual Studio 2010 #31
Цитата Сообщение от easybudda Посмотреть сообщение
Да что там я. Думаю, его кроме Вас вообще никто не знает. Ну Страуструпп разве-что в общих чертах...


Ну да, так конечно ругаться будет. Так оно и в таком виде не скомпилируется
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
    
class A {
public:
    int val;
};
 
void A() {
    std::cout << "bla bla bla" << std::endl;
}
 
int main(){
    A a;
    a.val = 13;
    
    A();
    std::cout << a.val << std::endl;
    
    return 0;
}
скажет
Код
C:\c_cpp\shitcode>g++ -o aa aa.cpp
aa.cpp: In function 'int main()':
aa.cpp:13:4: error: expected ';' before 'a'
aa.cpp:14:2: error: 'a' was not declared in this scope
что не удивляет. Мне другое не понятно: зачем вообще такие грабли делать? Тру-профессионалу обычных проблем с ошибками в программе мало, дебажить, так дебажить? Это если ССЗБ, или просто заняться нечем по-моему...


Во-первых прочитайте уже правила, там кроме уважительного общения (я-то не претендую, но многие обижаются) есть ещё пункт
, а во-вторых что мне, неучу, там делать? Нужно посмотреть, как с вашими шарадами gcc справится - так скачайте, установите и сами посмотрите...
Не надо было приводить сообщения компилятора. Я вам специально привел пример, чтобы вы знали, что такое уточненное (elaborated name) класса, и что это не одно и тоже, что просто указания имени класса.

Приведенный вами код будет успешно компилироваться, если вы замените объявление A a; на struct A a; Об этом я и вел речь.
talis
17.10.2011, 19:27
  #32

Не по теме:

A не уважает B из-за того, что B не уважает A. Race condition просто какое-то.

Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
17.10.2011, 19:48     Баги в Visual Studio 2010 #33
Сыроежка, а по каким критериям можно отличить баг от особенности реализации? Например в 10-ой студии не реализована спецификация исключений(хотя она предусмотрена стандартом), так что это - баг или особенность реализации?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.10.2011, 19:50     Баги в Visual Studio 2010 #34
Цитата Сообщение от Kastaneda Посмотреть сообщение
хотя она предусмотрена стандартом
Уже не предусмотрена. Отказались (к шчастью).
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
17.10.2011, 19:51     Баги в Visual Studio 2010 #35
Цитата Сообщение от Deviaphan Посмотреть сообщение
Уже не предусмотрена. Отказались (к шчастью).
Не знал. Речь, я так понимаю, о C++11?
magirus
Супер-модератор
 Аватар для magirus
25474 / 14015 / 740
Регистрация: 15.09.2009
Сообщений: 59,660
Записей в блоге: 61
17.10.2011, 19:51     Баги в Visual Studio 2010 #36
Цитата Сообщение от Сыроежка Посмотреть сообщение
хамью-модераторам
язычок придержи.
Сыроежка
Заблокирован
17.10.2011, 20:00  [ТС]     Баги в Visual Studio 2010 #37
Цитата Сообщение от Kastaneda Посмотреть сообщение
Сыроежка, а по каким критериям можно отличить баг от особенности реализации? Например в 10-ой студии не реализована спецификация исключений(хотя она предусмотрена стандартом), так что это - баг или особенность реализации?
В стандарте есть такие выражения, как implementation defined, или, например, program is ill-formed, или program shall do. Два последних термина означают баг компилятора, если он такое допускает, то есть ill-formed code, или, напротив, не делает того, что должен делать.

Ведь вопрос стоит так: вы должны знать, то ли вы неправильно что-то делаете, и поэтому ваш код не компилируется, или, напротив, неправильные конструкции пропускаются компилятором, или же это ошибка компилятора, и вам надо либо сменить компилятор, либо придумать трюк, как баг компилятора обойти. То есть действия программиста должны быть осознанны. Он должен четко понимать, что имеет место быть.

Для примера могу привести код, который я указал на другом форуме, и который в свою очередь нашел еще на одном форуме. Вот этот код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace X 
 { 
    namespace Y 
    { 
        class Outer {}; 
  
        namespace Z 
        { 
            class Inner 
            { 
                void callMe(Outer* param); 
            }; 
        } 
    } 
 } 
  
 using namespace X::Y::Z; 
  
 void Inner::callMe(Outer* param) 
 { 
 }
g++ по утверждению автора исходного вопроса компилирует этот код, а MS VC2010 не компилирует. И что делать? Естественно нужно иметь четкий ответ на вопрос, какой из компиляторов прав.

Добавлено через 6 минут
Цитата Сообщение от magirus Посмотреть сообщение
язычок придержи.
Научитесь вести себя сначала прилично, а уж потом другим что-то советуй!
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
18.10.2011, 06:43     Баги в Visual Studio 2010 #38
Цитата Сообщение от Сыроежка Посмотреть сообщение
И что делать?
Этот код НЕ должен компилироваться, т.к. класс Outer в строке 19 не известен. Нужно ещё using namespace X::Y добавить, для возможности компиляции.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
18.10.2011, 07:43     Баги в Visual Studio 2010 #39
Цитата Сообщение от Сыроежка Посмотреть сообщение
В MS VC++ 2010 также не мало глюков! Другое дело, что у вас не такая высокая квалификация, чтобы понять, что вы имеете дело с глюком.
Самый простой глюк MS VC++ 2010 (правда я обнаружил его до установки обновления SP1, так что не знаю, исправлен он уже или нет), это не возможность совершенно корректного определения
Код C++1
2
3
4 struct A
{
int A;
};
Сыроежка, это не глюк студии, а глюк твоей логики, без обид если что. При создание большой проги с заданиями одинаковых имён себе только гемору создаёшь в голове и в коде.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2011, 09:25     Баги в Visual Studio 2010
Еще ссылки по теме:

c++, visual studio 2010! 6. C++
c++, visual studio 2010! 7 C++
Visual studio 2010 C++

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

Или воспользуйтесь поиском по форуму:
LosAngeles
Заблокирован
18.10.2011, 09:25     Баги в Visual Studio 2010 #40
xAtom, да он, тс, как бы нигде и не ратовал "за создание большой проги с заданиями одинаковых имён". Речь идёт именно о глюках студии, тема интересная так как их довольно много, но бесмысленная, так как о них можно и на сайте майкрософта почитать. Сыроежка, советую тебе почитать карнеги, хотя надеюсь ты так только на форуме выпендриваешься, если ты так на работе с колллегами общаешься, то тебе наверно весь отдел уже смерти желает)
Yandex
Объявления
18.10.2011, 09:25     Баги в Visual Studio 2010
Ответ Создать тему
Опции темы

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