Intel® C++ Compiler for Windows* - General compatibility with Microsoft* Visual C++*


Specify Degree of Microsoft* Compatibility
In a limited number of cases, the Microsoft* compiler compiles source code without generating an error while the Intel® compiler generates an error for the same source code. If this is undesirable, consider using the /Qms option with the Intel compiler may allow a successful compilation. The default setting for the /Qms option is /Qms1.

  • /Qms0 - Instructs the compiler to disable Microsoft compatibility bugs.
  • /Qms1 - Instructs the compiler to enable most Microsoft compatibility bugs (default).
  • /Qms2 - Instructs the compiler to implement full Microsoft compatibility.

Source and Binary Compatibility
Intel® C++ Compiler for Windows* is source and binary compatible with Visual C++ 6.0*, Visual C++ .NET 2003, Visual C++ 2005*, and Visual C++ 2005* when /Qvc switch is specified.

  • /Qvc6 - source and binary compatible with Visual C++ 6.0 (this option is not supported in 11.0)
  • /Qvc7 - source and binary compatible with Visual C++ .NET 2002 (this option is not supported in 10.0)
  • /Qvc7.1 - source and binary compatible with Visual C++ .NET 2003
  • /Qvc8 - source and binary compatible with Visual C++ 2005
  • /Qvc9 - source and binary compatible with Visual C++ 2008

Forcing Function Inlining Using _inline
The Intel C++ Compiler for Windows cannot be forced to inline functions with _inline. There are certain criteria for inline function expansion that must be satisfied for a routine to be considered for inlining. Once these criteria are met, the Intel® C++ Compiler picks the routines whose inline expansions provide the greatest benefit to program performance. If you need to force inlining, use __force_inline. Please consult the "Criteria for In-Line Function Expansion" section of t he User's Guide.

#pragma[blank] Seems to Have No Effect
The Intel C++ Compiler for Windows does not support the following pragmas:

#pragma component
#pragma function
#pragma include_alias
#pragma inline_depth
#pragma inline_recursion
#pragma intrinsic
#pragma setlocale

Support for #pragma Optimize
#pragma optimize is partially supported. It can only be used to enable or disable all optimizations specified at the command-line. The ability to give a custom list of optimizations to the pragma is not supported.

ASM Labels Are Treated as Case Sensitive
When compiled by the Intel C++ Compiler for Windows, inline assembly target labels of " goto" statements are case sensitive. The Microsoft Visual C++* Compiler treats these labels in a case insensitive manner.

IDE Gives Warning Message When Using -Fe
When using the -Fe compiler option from the Microsoft Visual Studio* 6.0 IDE, the following message is generated: " Format of decimal number 'e' is incorrect. It may only contain characters 0-9. It must be positive, the '+' prefix is optional. The maximum allowed decimal number is 4,294,967,295."

The IDE checks the character that comes after the -F option for validity. Because -Fe is an option unique to the Intel C++ Compiler, the IDE determines that you are trying to specify the -F option that can only be followed by a number 0-9. This warning does not apply to the Intel® C++ Compiler, so it can be safely ignored. If you click " OK", the -Fe option will still be used.

Debugging Streaming SIMD Extensions Code
The Microsoft Visual C++ .NET debugger supports the Intel® Streaming SIMD Extensions. The Microsoft Visual C++ 6.0 debugger also supports the SSE, but only if you have service pack 5 or higher installed. You can also disassemble the Intel Streaming SIMD Extensions assembly using the Intel® Enhanced Debugger, which is available with the Intel C++ Compiler for Windows.

For more complete information about compiler optimizations, see our Optimization Notice.


Jennifer J. (Intel)'s picture

About #2, the assignment operator (sorry in previous mistake about copy-contructor), no return statement is dangerous here. wouldn't you want your code to be safer?

Our compiler engineer does not agree to ignore this warning. I do agree.

If you have a testcase about warning 2157, please post here.


Jennifer J. (Intel)'s picture

About #2, it's strange that VC does not give error for copy-contructor but does for functions. It seems a compatibility bug to me. I'll report it.

About #1, I could not get compiler to emit the msg. Please post more code example. Thanks!

julia-fedorova (Intel)'s picture

neither of /Qms0 /Qms1 /Qms2 helped me with Intel 11 compiler; it didn't like two below (3d party code) and kept saying "error" and do not compile.

But /Qw2157 and /Qw1011 helped.

#define NULL 0

Lock& operator=( const Lock& l )
// no return statement

Add a Comment

Have a technical question? Visit our forums. Have site or software product issues? Contact support.