Groups | Blog | Home
all groups > visual c > october 2005 >

visual c : [bug]Vc7\include\yvals.h(18) : fatal error C1017: invalid integer constant expression


<www.fruitfruit.com>
10/28/2005 12:00:00 AM
The following code snippet can be build in VC 6.0, but failed in VC 2003.
//////////////save the following code in t.cpp
#define _MT
#define _WIN32_WINNT 0x0500
#include <iostream>
#include <process.h>
#include <windows.h>
#pragma comment(lib,"libcmt.lib")
__int64 Counter=0;
BOOL volatile stop_thread = FALSE;
void __cdecl BasicThreadProc( void* pArguments )
{
__int64* p = (__int64*)pArguments;
__int64& c = *p;
std::cout<< "In BasicThreadProc...\n" ;
while(!stop_thread)
c +=1;
std::cout<<"result:";
char buf[32];
_i64toa(c, buf, 10);
std::cout<< buf;
std::cout<<std::endl;
}
int main()
{
_beginthread(BasicThreadProc,0,(void*)&Counter);
HANDLE hTimer = NULL;
LARGE_INTEGER liDueTime;
liDueTime.QuadPart=-100000000;
// Create a waitable timer.
hTimer = CreateWaitableTimer(NULL, TRUE, "WaitableTimer");
SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0);
WaitForSingleObject(hTimer, INFINITE);
CloseHandle(hTimer);
stop_thread = true;
getchar();
return 0;
}

I use the following file to build this cpp file
call "C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"
cl /TP "C:\Temp\t.cpp"
del "C:\Temp\t.obj"
pause

call "D:\Apps\vs2003\Vc7\bin\vcvars32.bat"
cl /TP "C:\Temp\t.cpp"
del "C:\Temp\t.obj"
pause

David Lowndes
10/28/2005 12:00:00 AM
[quoted text, click to view]

Failed how, what's the error?

Dave
--
Holger Grund
10/28/2005 12:00:00 AM
[quoted text, click to view]
You shouldn't define _MT. Use the compiler switches /MT(d) ot /MDd

I don't have a copy of VC 7.1 here. But I guess the MS DW config
header yvals.h defines _MULTI_THREAD as _MT or uses
an #if _MT.

The compiler will define _MT to 1.

-hg

<www.fruitfruit.com>
10/29/2005 12:00:00 AM
The error message is in the caption.
I can paste it again.
D:\Apps\vs2003\Vc7\include\yvals.h(18) : fatal error C1017: invalid integer
constant expression

Is there someone who is willing to give a try?

[quoted text, click to view]

<www.fruitfruit.com>
10/29/2005 12:00:00 AM
I know how to set the compiler options, but I want to compile the file in
command line.
In fact I wrote a shell extension to build a single CPP file with VC6/VC7.
So I want to avoid creating a project for a single CPP file.

[quoted text, click to view]

<www.fruitfruit.com>
10/29/2005 12:00:00 AM
OK, #define _MT 1 works happily.
It is my problem that "I don't have a copy of VC 7.1 here." stopped me from
further thinking.
Thank you all.



[quoted text, click to view]

David Lowndes
10/29/2005 9:25:50 AM
[quoted text, click to view]

Holger obviously had and suggested that you don't define _MT in your
source code. It compiles OK if you do as he suggested or if you change
your code to:

#define _MT 1

Dave
--
AddThis Social Bookmark Button