I detected a problem with MinGW ( GCC-like ) C++ compiler. It is a well known fact that Intel C++ compiler
is compatible with Microsoft C++ compiler on Windows platforms, and compatible with GCC C++ compiler
on Linux platforms.
Since I don't have a Linux platform I wonder if somebody could verify the following Test Case with
32-bit and 64-bit Intel C++ compilers for Linux. Some modifications related to '_WIN...' macros and
the '__w64' keyword are needed.
Hi Igor, Please take a look at a thread:
( Post #3 )
and I'll also provide a small example regarding detection of some issues with MinGW, Inteland Microsoft C++ compilers.
>> Compilation Error <<
------ Build started: Project: MgwTestApp, Configuration: Debug Win32 ------
Performing Makefile project actions
*** ScaLib Message: Compiling with MinGW v3.4.2 ***
*** ScaLib Message: Configuration - Desktop - _WIN32_MGW - DEBUG ***
In file included from ../../Include/CommonSet.h:22,
../../Include/MatrixSet.h: In member function `RTbool TMatrixSet
../../Include/MatrixSet.h:76: error: `m_ptData1D' undeclared (first use this function)
../../Include/MatrixSet.h:76: error: (Each undeclared identifier is reported only once for each function it appears in.)
MgwTestApp - 2 error(s), 0 warning(s)
>> Notes <<
MinGW C++ compiler is a very-strict C++ compiler compared to Microsoft and Borland C++ compilers.
I would rate Intel C++ compiler as a double-strict C++ compiler compared to Microsoft, MinGW and
Borland C++ compilers when a 'Warning Level' option '/W5' is used.
Int_Native iInt_Native1 = 0x00000000ddddcccc; // Compiled
UInt_Native uiUInt_Native1 = 0x00000000ddddcccc; // Compiled
Int_Native iInt_Native2 = 18446725308424768716LL; // Warning: this decimal constant is unsigned only in ISO C90
UInt_Native uiUInt_Native2 = 18446725308424768716LL;// Warning: this decimal constant is unsigned only in ISO C90
Int_Native iInt_Native3 = 18446725308424768716ULL; // Warning: this decimal constant is unsigned only in ISO C90
UInt_Native uiUInt_Native3 = 18446725308424768716ULL; // Warning: this decimal constant is unsigned only in ISO C90
//Int_Native iInt_Native4 = 0xffffeeeeddddcccc; // Error: integer constant is too large for "long" type
//UInt_Native uiUInt_Native4 = 0xffffeeeeddddcccc; // Error: integer constant is too large for "long" type
It works and here areresults ( lines 4, 5, 6, 7 ):
Instead of0xffffeeeeddddccccI used18446725308424768716.