This product consists of the Intel® C++ Compiler, the Intel® Debugger, integration into Microsoft* visual development environments, and code coverage and test prioritization tools.
Intel® compilers support three platforms: general combinations of processor architecture and operating system type. This section explains the terms that Intel uses to describe the platforms in its documentation, installation procedures and support site.
This product is available in two editions.
The Standard Edition contains the following components:
The Professional Edition includes all of the Standard Edition and adds:
These additional components of the Professional Edition are installed separately and have their own Release Notes.
Note: The default installation master directory referred to as <install-dir> in
this document, is %ProgramFiles%\Intel The C++ 10.1 compiler
is installed into the Compiler\C++\10.1.xxx subfolder.
To receive technical support and product updates for the tools provided in this product you need to register. For how to register, please see Technical Support section below.
The following section discusses new features and changes in the Intel C++ Compiler since version 10.0. Please see the separate release notes for the Intel Debugger.
Version numbers stated here may not reflect the actual released update version. The changes listed are included in updates with the stated version or higher.
/Qopt-prefetch-issue-excl-hint[-] added /arch:ia32 added /Qopt-jump-tables added /Qopt-loadpair[-] added/Qopt-mod-versioning[-] added /Qopt-prefetch-initial-values[-] added /Qopt-prefetch-next-iteration[-] added /Qunroll-aggressive[-] now available on IA-64 architecture The following is a listing of command line options that are new or have changed since the initial version 9.1 release. Please refer to the compiler documentation for more information on these options.
/arch:ia32/fast/help [category]/Qalias-const[-]/QaxS/Qdiag-<type>:<diag-list>/Qdiag-dump/Qdiag-enable:sv[1|2|3] /Qdiag-enable:sv-include/Qdiag-file[:file] /Qdiag-file-append[:file]/Qdiag-id-numbers[-]/Qeffc++/Qfnalign[:n]/Qfp-speculation=<mode>/Qinline-calloc[-]calloc() as calls
to malloc() and
memset(). (Default: off) /Qinline-dllimport[-] /Qinstrument-functions[-]/Qipo-jobs:n/Qkeep-static-consts[-]/Qopenmp-lib:typelegacy) /Qopt-class-analysis[-]/Qopt-jump-tables:default|never|large|<max-entries>default) /Qopt-loadpair[-]/Qopt-mod-versioning[-]/Qopt-multi-version-aggressive[-]/Qopt-prefetch-initial-values[-]/Qopt-prefetch-issue-excl-hint[-]/Qopt-prefetch-next-iteration[-]/Qopt-ra-region-strategy[:keyword]default) /Qpar-adjust-stack:n 0) /Qpar-runtime-control[-]/Qpar-schedule-<keyword>[[:]n]/Qprefetch[-]/QxT. (IA-32 and IA-64 architecture
only, default: off) /Qsave-temps[-]/Qtcheck[:<mode>]/Qtcollect/Qunroll-aggressive[-]/Qvec-guard-write[-]/QxO/QxSFor information on command line options that are either deprecated (still functional but to be removed in a future version) or removed (no longer supported), please refer to the section Compiler Options > Deprecated and Removed Compiler Options in the on-disk documentation.
Many command line options have an older spelling where underscores (“_”) instead of hyphens (“-“) connect the words in the option name. The older spelling is still a valid alternate option name.
/Qopt-jump-tables:default|never|large|<max-entries> This option allows user control for the size of jump tables generated by
the compiler. Jump tables are used for switch constructs,
which are implemented either as jump tables or a series of if-then-else
constructs. The method used typically has an impact on performance
of the generated code, and on the size of the data area. Using jump
tables will favor speed over size.
The available values are:
defaultnever large max-entries>/fast Changed The /fast option is a shorter way of specifying a set of options
that generally improve run-time performance. As documented, the set
of options may change over time. In version 10.x, /fast sets /QxT,
whereas in earlier versions it set /QxP. If this change is not
appropriate for you, you must specify the individual options you want
instead of using /fast. Please see the Compiler Options
section of the on-disk documentation for further information.
/QxW Enabled by Default on Intel® 64 Systems On Intel® 64 architecture systems, /QxW is enabled by default;
this has the effect of enabling vectorization and you may see vectorization
report messages displayed where you did not when using previous releases.
To disable the vectorization report messages, use /Qdiag-disable:vec.
You may still specify alternate options such as /QxP or /QaxT.
Command line and visual development environment integration for Microsoft Visual Studio .NET 2002 is no longer provided. The Visual Studio versions supported are 2003 and 2005.
You can have multiple versions of the Intel C++ Compiler installed, and
as of version 10.1, two or more update versions of 10.1 can coexist.
When you install an update to version 10.1, previous versions of 10.1
are not uninstalled automatically. Users of Microsoft Visual Studio
2003 or 2005 must select the new version from within Microsoft Visual
Studio (Tools
> Options > Intel(R) C++ > Compilers ).. If you do not
wish to have old versions installed, you can uninstall them before
(recommended) or after installing the newer version. Note that the
install path will be different for each update.
As of version 10.1 you can specify that OpenMP libraries compatible Microsoft Visual C++
be used by specifying /Qopenmp-lib:compat. This may be desirable if
your application contains some source modules built with Microsoft
Visual C++ and your application uses OpenMP. The default is /Qopenmp-lib:legacy which uses the Intel-supplied OpenMP libraries.
Applications using the compat libraries must be built with
version 10.0 or later of the Intel C++ and/or Fortran compilers with /Qopenmp-lib:compat specified.
In a future release, the default will change to /Qopenmp-lib:compat,
and in a release after that, the legacy libraries will be removed.
new Expression with Parenthesized TypeIn a new expression, a parenthesized type followed immediately
by an array index is not valid C++. For example:
int main()
{
char *p1 = new (char *)[20]; // array index is not allowed after ")"
return 0;
}
In versions earlier than 10.0, the Intel C++ compiler would accept this code and either interpret it as if the array index was part of the type being created:
new ((char*)[20])
or not:
(new
(char *))[20]
depending upon the reference compiler and compatibility version target. As of version 10.0, the compiler always gives an error for this incorrect usage.
The Intel® C++ integration into Microsoft Visual Studio 2005* includes support for the Visual C++ Custom Build Rule functionality with some limitations. Custom Build Rules allow you to add custom tool invocations to your build process. See the Visual C++ documentation for a detailed explanation of Custom Build Rules.
You must create your custom build rules before converting your Visual C++ project to the Intel project system. If you need to modify your custom build rules after converting your project to the Intel project system, you must convert your project to the Visual C++ project system, make your custom build rule changes, and then convert the project back to the Intel project system.
The Macro lists that are available when you change the string properties defined for a Custom Build Rule don’t contain Intel-specific macros (such as $(icInstallDir); $(icIDEInstallDir); $(icProjectExt); $(icProjectFileName)). However, you can use the Intel-specific macros in Custom Build Rule property values and they will be expanded correctly.
The Intel® C++ integration into Visual Studio 2005 does not currently support the Visual C++ Tool Build Order functionality which is available from the Visual C++ Tool Build Order dialog box. That is, you cannot change the order in which the build steps are run.
KMP_AFFINITY Environment Variable for OpenMP* Applications The KMP_AFFINITY environment variable can be used in
an OpenMP* application to specify how execution threads should be bound
to processors on the system. This setting's effect is to bind each
thread, in order of creation, in a round-robin fashion to a processor
core in the system for the duration of the program. The value of KMP_AFFINITY should
be of the form:
compact,<level>
where <level> is a non-negative integer. For example:
compact,1
The argument <level> specifies the gap between
successive thread's bound cores in the machine topology map, which
is represented as a binary tree. A level of zero indicates that threads
will be bound to successive threading contexts for processors which
have Intel® Hyper-Threading Technology enabled, or successive processors
if not. The levels increase by one level from threading contexts, to
cores, to packages (processors) in sequence. This setting is supported
for processors supplied by Intel Corporation only on systems where
the required operating system support for thread binding is present.
The cpu_dispatch and cpu_specific keywords
now accept the cpuid code core_2_duo_ssse3 for Intel® Core™2
processors and Intel® Xeon® processors with Supplemental Streaming
SIMD Extensions 3 (SSSE3), and the code core_2_duo_sse4_1 for
Intel® Core™2 processors and Intel® Xeon® processors
with Streaming SIMD Extensions 4.1 (SSE4.1)
This version features a complete redesign of the optimizer that integrates
parallelization (all architectures) and vectorization (IA-32 and Intel® 64
architecture) at O2 and O3 optimization levels
with memory and loop optimizations.
Performance can be substantially improved by:
Loop Transformation (HLO) Optimization reports tell you why the compiler was unable to apply loop interchange transformations on a set of loops and suggests loop interchange if the reported bottlenecks can be removed by source changes. These reports have been enhanced to provide more detailed information and to be easier to understand.
In version 10.1, the following change has been made to the compiler's integration into Microsoft Visual Studio 2003 and 2005.
Static Verifier is a new compiler feature which performs static analysis
of a program across multiple source files. It can detect different
kinds of defects and doubtful or inconsistent uses of language features
in user code and report them according to their severity level. Static
Verifier understands C/C++ and Fortran code and can also perform analysis
of OpenMP directives.
In this release, when Static Verifier is enabled the linker is not
invoked so an executable or static/dynamic link library is not produced,
object files that were produced as a result of invocation of Static
Verifier are not valid and should not be used for generating of real
executable or static/dynamic link libraries. The current usage model
is that Static Verifier is added as an alternate build option to produce
a diagnostic report.
Static Verifier cannot be used in conjunction with cross-file interprocedural optimization (/Qipo).
For more information, please refer to the section on Building Applications > Error Handling > Handling Compile Time Errors > using Static Verification Diagnostic Options in the on-disk documentation.
When Static Verifier support is enabled within the IDE, the customary final build target (e.g. an executable image) is not created. As such, we recommend that a separate "Static Verification" configuration be created, by cloning the existing Debug (development) configuration, for use when static verification is desired.
<New..>Intel(R)
C++ > Diagnostics property
page. Use the "Level of Static Analysis" and "Analyze
Included Files" properties to control Static Verification.In a future major release of the Intel C++ Compiler for Windows, the Intel® Debugger (IDB) will no longer be provided. Debugging inside Microsoft Visual Studio is unaffected. Please use the debugging capability in Microsoft Visual Studio instead of IDB
Please see the separate Installation Guide for installation and configuration instructions.
Intel® compilers support three platforms: general combinations of processor architecture and operating system type. This section explains the terms that Intel uses to describe the platforms in its documentation, installation procedures and support site.
The term "native" refers to building an application that will run on the same platform that it was built on; for example, building on IA-32 architecture to run on IA-32 architecture . The term "cross-platform" or "cross-compilation" refers to building an application on a platform type different from the one on which it will be run, for example, building on an IA-32 architecture system to run on Intel® 64 architecture systems . Not all combinations of cross-platform development are supported and some combinations may require installation of optional tools and libraries.
The following table describes the supported combinations of compilation host (system on which you build the application) and application target (system on which the application runs).
| Host \ Target | IA-32 | Intel® 64 | IA-64 |
|---|---|---|---|
| IA-32 | Yes |
Yes |
Yes |
| Intel® 64 | Yes |
Yes |
Yes |
| IA-64 | No |
No |
Yes |
Note: The above table refers to use of the command-line build environment. Some combinations may not be available with certain Microsoft visual development environments.
Notes:
It is the responsibility of application developers to ensure that the machine instructions contained in the application are supported by the operating system and processor on which the application is to run.
For Windows Vista, Microsoft supports only Visual Studio 2005/2008* and not earlier Visual Studio versions. Before installing the Intel compiler on Windows Vista, Visual Studio 2005 users should install Visual Studio 2005 Service Pack 1 (VS 2005 SP1) as well as the Visual Studio 2005 Service Pack 1 Update for Windows Vista which is linked to from the VS 2005 SP1 page. After installing these updates, you must ensure that Visual Studio runs with Administrator permissions, otherwise you will be unable to use the Intel compiler. Please be sure to uninstall the Intel compiler integration before installing any Visual Studio update. For more information, please see Microsoft's Visual Studio on Windows Vista page and related documents.
In the next major release of Intel C++ Compiler for Windows, support for Microsoft Visual C++ 6.0 and Microsoft Visual Studio 98 will be removed. Please migrate to Microsoft Visual Studio 2005 or 2008 in order to assure compatibility with future Intel compiler releases.
"Win32 Console Project", "Win32 Application",
etc. Project types with .NET attributes such
as the ones below cannot be converted to an Intel
C++ project:
Empty Project (.NET)
Class Library (.NET)
Console Application (.NET)
Windows Control Library (.NET)
Windows Forms Application (.NET)
Windows Service (.NET)error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
It happens for projects with the following project properties settings:
General/Configuration Type = "Application (.exe)"
General/Use Of MFC = "Use MFC in a Static Library" or "Use MFC in a Shared DLL"
Linker/System/SubSystem = Any value which is different from "Console (/SUBSYSTEM:CONSOLE)"The workaround is:
Set the Project Property Linker/Advanced/Entry Point = wWinMainCRTStartup
error PRJ0019: A tool returned an error code from "Performing registration"
The work around is to add the following commands into the "Post Build Event" in the
Project Property/Build Events/Post-Build Event:
mt /nologo /manifest $(TargetPath).manifest /outputresource:"$(TargetPath);#2"
C:/Winnt/System32/regsvr32 /s /c "$(TargetPath)"IDB)
/Zi is used
together with inlining. Inlining can happen if the user
specifies /Qipo, /Qip
or compiles a C++/C99 program at option levels /O1 or
above. This is due to the generation of debug information.
For many applications, this combination of compiler options
will not increase compile time or compile-time memory use.
In Microsoft Visual Studio 2005, the static, single-threaded Visual C++
libraries libc.lib and libcd.lib have been removed.
If you specified that the Intel C++ Compiler should use Visual
Studio 2005 for command-line building, and attempt to build an
application with the static, single-threaded library, which
was the default in earlier versions, you will get a warning from
the compiler as follows:
icl: warning: option '/Qvc8' or higher used with '/ML[d]' is not
supported
Note that /Qvc8 was added to icl.cfg at install
time if you specified command line integration with Visual Studio
2005. This tells the icl compiler driver that you are using
Visual Studio 2005.
If you attempt to link such an application you will
get an error from the linker that libc.lib or libcd.lib is
not found. For example:
LINK : fatal error LNK1104: cannot open file 'LIBC.lib'
To resolve this, specify the threaded and/or DLL forms of the run-time libraries. For example:
/MT/MDIf you do not specify otherwise, the icl default for use with
Visual Studio 2005 is /MT.
This issue may also affect projects which are built from the Microsoft
Visual Studio IDE. In this case, change the project property C++..Code
Generation..Runtime Library to the desired new value.
When running on Windows Vista*, Microsoft supports the use of Microsoft Visual Studio 2005 and not earlier versions of Visual Studio. Visual Studio must be run with elevated privileges in order to operate properly on Windows Vista. Microsoft plans to issue a service update for Visual Studio 2005 that will make this requirement clear. Intel recommends that you use the "Start as Administrator" option when beginning your Visual Studio session. For more information regarding Visual Studio on Windows Vista, please see this Microsoft article.
Intel C++ projects support the Property Sheets and User-Defined Macros functionality in Visual Studio 2005. We recommend that you modify your C++ project to specify that it inherits property sheets before converting to using the Intel C++ Project System, as otherwise the settings in the property sheets may not be recognized until you restart Visual Studio. For more information on the Property Sheets and User-Defined Macros functionality in Visual Studio 2005, please refer to Microsoft documentation.
If you have a Visual Studio-created Intel C++ project or solution and
wish to initiate a build from the command line or a batch file,
use devenv.exe, the Visual Studio launcher. Type devenv /? for available
command line options. The Microsoft tools MSBuild and Team Build cannot
currently be used to build Intel C++ projects.
_Complex When Using /Qc99 When using the /Qc99 option with the Microsoft Visual Studio
2005 headers you may see the following compilation error:
C:/Program Files/Microsoft Visual Studio 8/VC/include/math.h(135): error: _Complex can only be used with float, double, or long double types
_CRTIMP double __cdecl _cabs(__in struct _complex _Complex);
^
The problem is that _Complex is a keyword in C99 but it is being
used as an identifier in the cabs prototype in the math.h Microsoft
header. A workaround would be to add the following conditionals around the
inclusion of this header:
#define _Complex
#include <math.h>
#undef _Complex
(/Qax*)Compilation using /Qax[code] results in two copies
of generated code for each function. One for generic code and
one for CPU specific code. The symbol for each function then refers
to an Auto CPU Dispatch routine that decides at run-time which
one of the generated code sections to execute. Debugger breakpoints
that are set on these functions by name cause the application to stop in
the dispatch routine. This may cause unexpected behavior when debugging.
This issue may be addressed in a future version of the Intel Debugger and
Compilers.
/Oy-Compilation using /Oy- specifies that the IA-32 architecture
EBP register be used as a general purpose register, eliminating its use
as a frame pointer. Debuggers and traceback handlers may not be able
to properly unwind through a stack that contains a call to a function
that is compiled in this manner.
When building for IA-64 or Intel® 64 architecture systems using the Microsoft Platform SDK, applications may fail to link with errors such as the following:
LIBC.lib(a_str.obj) : error LNK2001: unresolved external symbol
__security_cookie
[...]
LIBC.lib(a_str.obj) : error LNK2001: unresolved external symbol
__security_check_cookie
[...]
This problem is due to an inconsistency within some versions of the Microsoft Platform SDK. Intel is working with Microsoft to resolve this issue. To work around the problem, link your application in one of the following ways:
icl hello.c /MD
icl hello.c -link bufferoverflowu.lib
icl hello.c /MT bufferoverflowu.libThe choice of bufferoverflowu.lib is appropriate for the typical
user-mode application using the Win32 API. If your application is for user-mode
subsystems and services which cannot use the Win32 API, use bufferoverflow.lib
instead. Kernel-mode applications and drivers must link to bufferoverflowk.lib.
memset/memcpy on IA-64
Architecture SystemsOn some versions of Microsoft Windows Server 2003 running on IA-64
architecture systems, calls to the C library routines memset and memcpy may
result in an unaligned access exception. This will occur if an argument
is a pointer to a type with a base alignment greater than 1 but the
actual argument is unaligned. To avoid this problem, make sure that
such arguments are properly aligned.
If you did not register your compiler during installation, please do so at the Intel® Software Development Products Registration Center. Registration entitles you to free technical support, product updates and upgrades for the duration of the support term.
For information about how to find Technical Support, Product Updates, Users Forums, FAQs, tips and tricks, and other support information, please visit: http://www.intel.com/software/products/support/cwin.
Note: If your distributor provides technical support for this product, please contact them for support rather than Intel.
Go" button next to the "Product"
drop-down list.
Submit Issue" link in the left navigation bar.
Development Environment (tools,SDV,EAP)" from the "Product
Type" drop-down list.
Intel(R)
C++ Compiler, Windows*" from the "Product Name" drop-down
list.
Note: Please notify your support representative prior to submitting source code where access needs to be restricted to certain countries to determine if this request can be accommodated.
Start..All
Programs..Intel(R) Software Development Tools..Intel(R) C++ Compiler 10.1..Build
Environment for applications running on IA-32 (substitute "Intel(R)
64" or " IA-64" as
applicable). Type the command: >> icl w_cc_x_10.1.xxx) from
the output into the corresponding Intel® Premier Support field. Please
include any other specific information that may be relevant
to helping us to reproduce and address your concern.Compiler Error Source Reducer (CESR) is a set of utilities which are useful individually or collectively in gathering, reducing, pinpointing, protecting, documenting, and bundling test cases comprised of C/C++ or Fortran source code. It can be helpful if you have a large application for which you want to extract a small test case for submission to Intel® Premier Support. CESR can be downloaded from Intel® Software Development Products Registration Center Product Downloads. Select your product and in the version dropdown, select CESR. CESR is unsupported and should be considered experimental, but we welcome your feedback on it through Intel® Premier Support. CESR requires prior installation of Python* 2.2 or newer.
You can view the Intel compiler and related HTML-based documentation with
a web browser that supports the Compiled HTML Help (.CHM) format, which provides
full navigation, index look-up, search, and hyperlink capabilities. If your
browser does not support opening .CHM files, you can open them directly by
double-clicking on the file names in Windows Explorer in the Docs directory.
The documentation index is provided for easy access of all documents. The
Document index is available from the Intel® C++ Compiler program
folder and is located at: <install-dir>Compiler\C++\10.1.xxx\Docs\Doc_Index.htm.
For this release, the online help has been reorganized as described
in the Doc_Index.htm file
and now includes a Getting Started guide as well as a separate Installation
Guide. The
Intel® Debugger Manual is available from the Intel® Debugger
program folder.
Information on Intel software development products is available at http://www.intel.com/software/products.
Some of the related products include:
INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL(R) PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. UNLESS OTHERWISE AGREED IN WRITING BY INTEL, THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY APPLICATION IN WHICH THE FAILURE OF THE INTEL PRODUCT COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR.
Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined." Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information.
The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.
Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order.
Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1-800-548-4725, or by visiting Intel's Web Site.
Celeron, Centrino, Intel, Intel logo, Intel386, Intel486, Intel Core, Itanium, MMX, Pentium, VTune, and Xeon are trademarks of Intel Corporation in the U.S. and other countries.
* Other names and brands may be claimed as the property of others.
Copyright (C) 2008, Intel Corporation. All Rights Reserved.