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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
Сыроежка
Заблокирован
#1

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

16.10.2011, 19:17. Просмотров 2510. Ответов 41
Метки нет (Все метки)

Цитата Сообщение от 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;
};
 Комментарий модератора 
Сообщения выделены из темы испортился компилятор посмотрите
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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, может кто подсказать как в ней разробатывать интерфейс для програм. Можесть ссылка у кого на такой...

Visual Studio 2010 - C++
как запустить с флехи exe файл программы Си в Visual Studio 2010??

Visual studio 2010 - C++
Господа, подскажите, где нужно полазить в опциях студии, чтобы после изменения программы она не запускала последний удачный дебаг? Заранее...

c++, visual studio 2010! 7 - C++
Given three natural numbers a, b, c which represent the day, month and year of some date. For example: 1, 4, 1991 represents 1st April...

c++, visual studio 2010! 6. - C++
Given natural number n. Compute 2 to the power of n. Do not use pow() function. Example: Input: 5 Output: 32

c++, visual studio 2010! 2. - C++
Given a year number. Output the number of days of that year. Example: Input: 1900 Output 365 Example:

41
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
16.10.2011, 20:32 #16
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы это откомпилировали с помощью MS VC++ 2010?
Код
andrew@debnout:~/cpp/other$ g++ -o aa aa.cpp
Просто скомпилировал, чтобы показать, что работает.
Цитата Сообщение от Сыроежка Посмотреть сообщение
Но и ваш представленный код некорректный, так как имя члена структуры должно скрыватиь имя самой структуры. то есть объявление в main объекта структуры должно уже писаться в виде
Ничего не понял. С какого бока он не корректный? В майн объявлен объект структуры А с именем а... Вот так корректнее було бы?
C++
1
2
3
4
//...
int main(){
    A b;
//...
0
Сыроежка
Заблокирован
16.10.2011, 20:39  [ТС] #17
Цитата Сообщение от easybudda Посмотреть сообщение
Код
andrew@debnout:~/cpp/other$ g++ -o aa aa.cpp
Просто скомпилировал, чтобы показать, что работает.

Ничего не понял. С какого бока он не корректный? В майн объявлен объект структуры А с именем а... Вот так корректнее було бы?
C++
1
2
3
4
//...
int main(){
    A b;
//...
Так вы компилировали с помощью g++? Это не есть MS VC++ 2010. Я речь вел именно об MS VC++ 2010.
Надо уточнить этот вопрос. На мой взгляд одноименное имя члена структуры должно скрывать имя структуры.

P.S. Возможно, это в свою очередь баг g++, что он позволяет делать такие определения. как A a; вместо struct A a;. Недавно видел вопрос на одном форуме, где очевидно имеется баг g++, если верить автору вопроса, который говорил, что тот код, который он привел, компилируется с помощью g++.
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.10.2011, 21:02 #18
Сыроежка,
это не баг, это возможность языка С++ (Да и С по-моему)
в некоторых случаях "struct" необходимо

C
1
void f(struct f var);
тру
C
1
void f(f var);
не тру

странно. и то и то компилится. по идее 2 не должно.


C
1
2
3
4
5
6
7
8
struct f {
    int x;
};
 
void f() {
    /*struct */ f v;
    v.x=10;
}
вот так точняк не компилится.
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
16.10.2011, 21:07 #19
с sp1 тоже не компилируется.
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
16.10.2011, 21:09 #20
Цитата Сообщение от Сыроежка Посмотреть сообщение
Так вы компилировали с помощью g++?
Ну да. Говорю же - показать, что в принципе такое работает.

Цитата Сообщение от Сыроежка Посмотреть сообщение
Это не есть MS VC++ 2010
Вот с этим не поспоришь!


Цитата Сообщение от Сыроежка Посмотреть сообщение
Возможно, это в свою очередь баг g++, что он позволяет делать такие определения. как A a; вместо struct A a;
Это баг языка С++, в нём при объявленной
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 минуту
Цитата Сообщение от OstapBender Посмотреть сообщение
Да и С по-моему
Нет, в С так работать не будет. Там обязательно либо писать struct A a; либо с помощью typedef соответствующий тип объявлять.
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
16.10.2011, 21:12 #21
пример с классом, тоже не скомпилируется в msvc 2010.
и это явно трудно назвать багом.
потому что конструктор всеравно создается.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.10.2011, 21:22 #22
Цитата Сообщение от Сыроежка Посмотреть сообщение
На мой взгляд одноименное имя члена структуры должно скрывать имя структуры.
Считаю ваш взгляд ошибочным, идентификатор обявленый внутри пространства { } с таким же именем как и внешний, да должен скрывать, но только внутри этого же или дочернего пространства. В данном случае пространство структуры { } равнозначно пространству main { }

Добавлено через 7 минут
это я к тому что в main писать struct необязательно, в C++ естественно
Цитата Сообщение от Сыроежка Посмотреть сообщение
то есть объявление в main объекта структуры должно уже писаться в виде
C++
1
struct A a;
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
16.10.2011, 21:23 #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
0
silentnuke
16.10.2011, 21:27
  #24

Не по теме:

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

1
Сыроежка
Заблокирован
17.10.2011, 18:10  [ТС] #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++, или это ошибочное утверждение. Буду ждать там ваших комментарий. Тот вопрос также на понимание С++.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.10.2011, 18:19 #26
ОМГ, ОМГ, невозможно писать код вида struct A{ int A; }; .(((( Удаляю студию!
1
Сыроежка
Заблокирован
17.10.2011, 18:22  [ТС] #27
Цитата Сообщение от Deviaphan Посмотреть сообщение
ОМГ, ОМГ, невозможно писать код вида struct A{ int A; }; .(((( Удаляю студию!
Если бы это был бы один баг, то можно было бы оставить студию. Но проблема в том, что, например, лично я уже обнаружил 5 багов. И некоторые из них достаточно серьезны, что могут не позволить использовать корректный код.

g++, похоже, тоже имеет не меньше багов. По крайней мере в том вопросе, ссылку на который я сделал, корректность g++ ставится под сомнение.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.10.2011, 18:33 #28
Цитата Сообщение от Сыроежка Посмотреть сообщение
лично я уже обнаружил 5 багов.
Пользуюсь около года. Никаких проблем не возникало. ~50К строк кода унаследованных с 2005 студии.
Видимо, проблема в плохом стиле кодирования.)
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,848
17.10.2011, 18:37 #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 справится - так скачайте, установите и сами посмотрите...
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.10.2011, 18:49 #30
Цитата Сообщение от easybudda Посмотреть сообщение
A();
Эту строку никакой компилятор не сможет интерпретировать правильно, потому что не сможет отличить вызов функции от создания локального объекта. Но, разумеется, это баг компилятора, а не косяк программиста.)
0
17.10.2011, 18:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2011, 18:49
Привет! Вот еще темы с ответами:

c++, visual studio 2010! 1. - C++
Given real numbers a, b, c, where a is not 0. Find if a quadratic inequality ах2 + bx + с = 0 has real roots. If it does, output them. If...

Visual Studio 2010 - C++
Прошу прощения если написал не туда, отдельного форма по VS не нашел! Люди такая проблема!! У меня есть VS 2010 Ultimate начинаю...

Microsoft Visual Studio 2010 - C++
В Visual Studio 2010 есть компанент типа StringGrid как в Builder C++?

Visual Studio 2010 Express - C++
Скачал, поставил, приятный такой дизайн. А как она по функциональности? Чем лучше VS 2005, 2008? Ну и впринципе удобно ли в ней работать?


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

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

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