|
Same output with Visual C++ 6.0, WinXP SP2
Surprising..
Regards,
Sandip.
|
|
|
|
|
SandipG wrote: Same output with Visual C++ 6.0
Visual C++ is not what a decent programmer call a standard compliant compiler, Sir !
|
|
|
|
|
IMHO such a discrepancy would be too gross, even for VC6 .
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
yes, probably, but it's not *THE* compiler to test the standard !
|
|
|
|
|
CPallini wrote: (it initializes only the first array element).
Not according to the STOSx instructions. Of course, I only use it to initialize POD types to 0 . Otherwise, I'd use memset() .
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
Sorry no STOS here:
...
const int N = 10;
int a[N]={7};
00401003 xor eax,eax
00401005 push esi
00401006 mov dword ptr [esp+8],7
0040100E mov dword ptr [esp+0Ch],eax
00401012 mov dword ptr [esp+10h],eax
00401016 mov dword ptr [esp+14h],eax
0040101A mov dword ptr [esp+18h],eax
0040101E mov dword ptr [esp+1Ch],eax
00401022 mov dword ptr [esp+20h],eax
00401026 mov dword ptr [esp+24h],eax
0040102A mov dword ptr [esp+28h],eax
0040102E mov dword ptr [esp+2Ch],eax
...
(Visual C++ 2008 Express Edition, Win XP ).
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
CPallini wrote: 00401003 xor eax,eax
Look two lines up from this one and you should find:
rep stosd
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
No luck (there isn't such insruction). On the other hand, the output of this program [^] confirms my assumption.
See also Sandip's post [^].
I should admit I was very surprised by such a behaviour.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
and what about {0} instead of {7}, and in Release Mode, not in Debug Mode ?
|
|
|
|
|
See my added remark here [^].
BTW my tests were of course performed both in Debug and the Release mode.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
toxcct wrote: ...and what about {0} instead of {7}...
0 works fine.
toxcct wrote: ...and in Release Mode, not in Debug Mode ?
Same results for both 0 and 7 . This is why I only do it when setting things to 0 . I use memset() otherwise.
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
DavidCrow wrote: 0 works fine.
It is just a side-effect of default (int) initialization: you're actually initializing only the first array item. Try the following code:
#include <iostream>
using namespace std;
struct MyStruct
{
MyStruct():_i(-1), _j(0),_k(-1){ }
MyStruct(int a):_i(a), _j(a), _k(a){ }
int _i,_j,_k;
};
void main()
{
int i;
MyStruct a[5] = {0};
for (i=0; i<5; i++)
{
cout << i << ") {" << a[i]._i << ", " << a[i]._j <<", " << a[i]._k << "}" << endl;
}
}
DavidCrow wrote: This is why I only do it when setting things to 0. I use memset() otherwise.
The above is a wise approach.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
For structs, I'd use memset() . I only use 0 for POD types.
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
DavidCrow wrote: For structs, I'd use memset(). I only use 0 for POD types.
That's good.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I think you are trying to do something like this..
class A{
int TModels[3];
public:
A():TModels[1](0){}
};
int main(){
A a;
}
which is giving you above error:
As per my knowledge there is no (standard) C++ way of doing this. Array initializers do not exist for classes. So prob you can do it somewhat like this:
class A{
int TModels[3];
public:
A(){
for(int i=0; i<3; i++)
TModels[i] = 0;
}
};
int main(){
A a;
}
Hope it helps you
|
|
|
|
|
Thanks. I've already corrected that.
|
|
|
|
|
Hi,
I am writing a client application to connect to servers that have shares information.
I found out that servers will not allow data to be sent via different sockets after login from one socket.
So, I think asynchronous model using the same socket to communicate with the server for the requests should work. Here I am planning to use a separate thread for each request.
Here, if 2 threads are present and each send diff requests. Now server sends the responses. When checked with this model, the responses were received by each thread were not theirs. (this might be because both the threads are receiving on the same socket.)
Here, my question is how to know that the message received doesnt belong it OR how to make the thread receive the response to the request it posted?
Please help on this ASAP, its urgent.
Many thanks in advance.
Mohan t working for N.I.C
|
|
|
|
|
>> I think asynchronous model using the same socket to communicate with the server for the requests should work
Yes.
>> Here I am planning to use a separate thread for each request
No.
>> because both the threads are receiving on the same socket
Yes.
>> how to know that the message received doesnt belong it OR how to make the thread receive the response to the request it posted
No, don't do it this way, use an IOCP model.
There are many articles on this site on how to impliment IOCP.
...cmk
The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.
- John Carmack
|
|
|
|
|
Does the application crashes in the release build due to the below mentioned warnings. because it gives the following message
debug build is fine.
---------------------------
Microsoft Visual C++
---------------------------
Unhandled exception in gator.exe (MFC42D.DLL): 0xC0000005: Access Violation.
---------------------------
OK
---------------------------
LINK : warning LNK4098: defaultlib "MSVCRTD" conflicts with use of other libs; use /NODEFAULTLIB:library
mfcs42.lib(nolib.obj) : warning LNK4098: defaultlib "mfc42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
mfcs42.lib(nolib.obj) : warning LNK4098: defaultlib "mfcs42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
LINK : warning LNK4089: all references to "comdlg32.dll" discarded by /OPT:REF
|
|
|
|
|
Hi,
I had the same warning. See this thread[^]. Hope it helps.
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
Hi all,
How can I execute .bat file using vc++.
I am trying to execute it by using ShellExecute() function but it is not executing.
ShellExecute(NULL,_T("Open"),"_T("D:\\myBat.bat"),NULL,NULL,SW_HIDE);
It is returning less than 32, but if it is successfully executed it should return greater than 32.
Please provide me the solution.
Thanks.
|
|
|
|
|
You can use the return value to find out what went wrong. Have you tried that?
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche
.·´¯`·->Rajesh<-·´¯`·.
[Microsoft MVP - Visual C++]
|
|
|
|
|
ERROR Return = 32 ".....file used by another precess"
|
|
|
|
|
Madan Chauhan wrote: file used by another precess
The error message is descriptive enough for me.
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche
.·´¯`·->Rajesh<-·´¯`·.
[Microsoft MVP - Visual C++]
|
|
|
|
|
Rajesh R Subramanian wrote: The error message is descriptive enough for me
so you read in my mind ? damned MVP
|
|
|
|