I just switched to Visual Studio .NET 2003 and I find it very annoying :mad:
But i know I have to be on the same step with the technology so I might start to like it in time...
I'll post some annoyances later on...
I just switched to Visual Studio .NET 2003 and I find it very annoying :mad:
But i know I have to be on the same step with the technology so I might start to like it in time...
I'll post some annoyances later on...
What are you annoyed about? VS 2003 is awesome.
Yeah really ?
1. When I program I usually like my hand on the keyboard. Now in VC6 for example I write 100 lines of code and suddenly I want to compile/build them:
- very simple: F7
Then if I happen to have a compile error which I usually do after 100 lines of code I wanna go to that exact line by pressing another key:
- very simple: F4
If U wanna go to the next error simply press F4 again, and again...
Then at the end F5 and up U go running your 100 lines you just wrote.
Now let's get to VS.NET:
First impression: wow this looks nice ![]()
Then I write some code... I press F7...
Nothing happens. Ok I say they must have changed the key for Compile/Build.
I go to Build menu to see what's the new key.
To my astonishment they did change the "key" to a "combination of keys" but now you probably think it's something like Ctrl+F7 cause you can see that at the bottom of the menu...
but stop "I want Compile/Build" not just compile, and they came up with this:
Ctrl + Shift + B !!!!
isn't that amazing ? you now have to press 3 diferent keys for the same job ?!?
to be continued...
VS.NET 2003 is very nice to work with (though 2005 beats it pants down), but you do need to know how to set it up correctly, particularly if you were used to VC++ 6.0 ![]()
You are right the default keyboard layout is awful. The first thing I do is change the default keyboard mappings to the VC++ 6.0 compatible ones, which changes all keys to be more close to the previous mappings (including our beloved F7 to compile and F8 to switch through the compilation errors, though there are a few bugs in that that crop everyonce in a while).
Besides, VC++ 7.1 (.net) does have some very nice compelling features, like far better ISO C++ compliance and one of my favourites: /GL a.k.a Link-Time Code Generation (LTCG), which can get you an extra few percent (sometimes quite a bit) of improved performance points just by recompiling the code with the switch.
I say Ok... Ctrl+Shift+B... I can live with that... I don't have to take my hands off the keyboard it's fine...
Now comes the funny part:
I have about 4 errors, they show up in a nice listbox at the bottom called Tasklist,
I say wow that's nice and I press F4... Nothing happens...
Ok again key combination change.
I open Tools->Options, Environment->Keyboard and start to look after the combination of keys that can lead me to the exact line where the error is...
I can't seem to find anyhing...
Then I see that I can select the VC6 key mappings ![]()
I select it... I go back press F7... YAY
it works it compiles/build
but I still got errors so now I press F4...
It shows me the line where the error is BUT! the cursor remains in the Output window...
So now the keyboard designer of VS.NET must have thought that I will probably delete the error from the Output window and it will go away cause I simply cannot think of any other explanation of this kinda thinking...
Anyway I had to grab my mouse... look for the line where the error is,
luckyly there's a small mark on the left that shows you where the line is (Thank God) and I can click on the line and fix the error...
Now imagine that for every error I have to grab my mouse, point to the line where the error is to correct it...
Now isn't that a waste of time ?
I would rather spend that time waving to the wall with my hand than be forced to do that for every error...
to be continued...
ISO C++ Compliance ?
That's another sequence of words Microsoft just doesn't want to hear about:
take this simple C++ standard code which I use in RKLauncher (and strangely it works with VC6)
class NullType { };
template <class T>
class TypeTraits
{
private:
// pointers
template <class U>
struct PointerTraits
{
enum { result = false };
typedef NullType PointeeType;
};
template <class U>
struct PointerTraits<U *>
{
enum { result = true };
typedef U PointeeType;
};
public:
enum { isPointer = PointerTraits<T>::result };
typedef PointerTraits<T>::PointeeType PointeeType;
};error C2146: syntax error : missing ';' before identifier 'PointeeType'
I can give you more and more examples, I know the C++ standard very well!
another one:
with preprocessing you aren't allowed to create a macro which can translate into a comment and taken into consideration at preprocessing...
#define COMMENT SLASH(/)
#define SLASH(s) /##s
COMMENT int x = 0;
the compiler should give an error of invalid token at the line where the
"int x = 0;" is but instead in VC.NET it just comments the code out...
Aye. Why don't you stick with VC6 then?
radu, that template'd doesn't seem to be valid C++.
Comeau test-drive says:
"ComeauTest.c", line 23: error: nontype
"TypeTraits<T>::PointerTraits<U>::PointeeType [with U=T]" is not a
type name
typedef PointerTraits<T>::PointeeType PointeeType;
ISO C++ Compliance ? That's another sequence of words Microsoft just doesn't want to hear about:
Almost non of the C++ compilers out there are really ISO compliant. Best one is Comeau.
common Ave
best compiler out there is the GNU C++ compiler (gc++)
and that is perfectly legal conforming to the standard.
check the Modern C++ Design (by Andrei Alexandrescu) for others
common Ave best compiler out there is the GNU C++ compiler (gc++)and that is perfectly legal conforming to the standard.
Doubt it
It only got recently SSA build into it. Has g++ support for template-export ? no, didn't think so ![]()
common Avebest compiler out there is the GNU C++ compiler (gc++)
and that is perfectly legal conforming to the standard.
check the Modern C++ Design (by Andrei Alexandrescu) for others
Actually, it is *not* legal C++. In this particular case, you're actually falling into the use of Dependent names (see section 14.6.2 Dependent Names of the C++ specification).
The code can be easily fixed (and in fact VC++.NET 2003 tells you exactly how to fix it in the error message), by prefixing your typedef with the keyword typename:
typedef typename PointerTraits::PointeeType PointeeType;
The use of typename in this context is actually demanded by the C++ spec, as can be seen in 14.6 ("Name Resolution") sub 3, which reads "A qualified-name that refers to a type and that depends on a template-parameter (14.6.2) shall be prefixed by the keyword typename to indicate that the qualified-type denotes a type, forming an elaborated-type-specifier (7.1.5.3)."
This will fix it, both in VC++ as well as Comeau (and yes, both are fine compilers and very C++ compliant, comau somewhat more). As for export, don't even get me started on that, as that's completely useful and not even the C++ ISO committe members can get their heads around how exactly it should behave ![]()
Also, btw, the fact that Microsoft delayed in taking the plunge to make the compiler more ISO compliant has fairly understood reasons (at that time doing so would have broken millions of lines of their on code bases). And, they actually know their C++ standard very well (I know several of the VC++ program managers and developers personally, so I've witnessed it first hand), here's a fact not many of you might know: Both Stan Lippman and Herb Sutter (yes, the ones you're thinking about) are architects in the VC++ team at microsoft.
Microsoft + C++ = Microsoft C++. There's nothing ISO about it. I would never use VS200x for C++, unless that's all I have available...
Microsoft + C++ = Microsoft C++. There's nothing ISO about it. I would never use VS200x for C++, unless that's all I have available...
Well, that's your choice; everyone has their favourite tools ![]()
Out of curiosity, what C++ compiler do you choose for C++ development if you need to do windows development? (that is, if you actually do windows development at all)
I do all of my Windows development on Visual Basic nowadays, but in the olden times I used to use a Borland compiler.
You are right tomasr
i overlooked the 14.6 - 2 ![]()
Anyway the next RK Launcher will be compiled with VS.NET!
Anyway the next RK Launcher will be compiled with VS.NET!
which will be the benefits instead of using VS6?
Anyway the next RK Launcher will be compiled with VS.NET!
That's the way to go, Radu. I hope you can stick to unmanaged code as long as you can with this project ![]()
I will herd
no .NET framework will be needed ![]()
Annoyances
- When I open an existing project and it had some open windows in it it will unfold all directories containing all the previously open files in the solution explorer and that takes a lot of time if U had 20+ open files
- It also automatically select the solution explorer even if my default view was the Class View when I previously closed the project
- I could not find a way to limit the open tabs (files) in the IDE which is again very annoying especially when U have like 40-50 open files (see the above comment about reopen project)
Finally something very nice!
they got rid of all MFC bloat and junk
now the MFC code looks really clean and nice!
Let's say u have a class:
c.h
-----
class C
{
public:
enum E
{
E1,
E2
};
void foo(E e);
void boo();
/*...*/
};
c.cpp
-----
// even if u put foo(C::E e)
void C::foo(E e)
{
}
void C::boo()
{
}
if u double-click on the foo method in the class view it just doesn't go to the method implementation like for all the other methods...
VC6 had the same bug...
strange they didn't fix it...
IIRC, the workaround is:
typedef enum tagE
{
E1,
E2
}E;
class C
{
public:
void foo(E e);
void boo();
/*...*/
};