编译错误:
warning C4003: not enough actual parameters for macro 'max'
error C2589: '(' : illegal token on right side of '::'
error C2059: syntax error : '::'
解决方案:
//z 2014-01-10 10:49:23 IS2120@BG57IV3 T1900760458.K.F3153028746[T214,L2546,R113,V3931]
numeric_limits的max问题。
std::numeric_limits<short>::max()这样用是错的。
(std::numeric_limits<short>::max)()这样用是对的。
VC2005中的头文件中定义为
static _Ty (__CRTDECL max)() _THROW0()
{ // return maximum value
return (SHRT_MAX);
}
有人说是为了避免和windows定义的宏混淆,我加了类名来调用的,应该先找到类的max函数,而不是先找到全局的定义啊,根本就不会产生冲突才对。
std::numeric_limits <short>::max()这样用是错的。
(std::numeric_limits <short>::max)()这样用是对的。
VC2005中的头文件中定义为
static _Ty (__CRTDECL max)() _THROW0()
{ // return maximum value
return (SHRT_MAX);
}
有人说是为了避免和windows定义的宏混淆,我加了类名来调用的,应该先找到类的max函数,而不是先找到全局的定义啊,根本就不会产生冲突才对。
1. 不自动 format 注释部分
//z 2013-07-19 17:23:12 IS2120@BG57IV3.T2269357397.K[T8,L225,R4,V208]
This works with Visual Studio 2005 and 2008:
1. in the IDE, go to Tools->Import and Export Settings; then Export selected environment settings; deselect everything except Options->Text Editor; save to a new file.
2. Edit your exported settings file in some text editor. Search for the string "AutoComment". There's a PropertyValue tag with value 1, change it to 0, and save the file.
3. in the IDE, import this new file using Tools->Import and Export Settings. It should stop formatting comments right away.
Text Editor > C# > Advanced > Generate XML documentation comments for ///
Unfortunately, turning this off not only disables the leading asterisk for block comments, but of course also disables the auto-complete feature for XML documentation comments. It would be nice if these two different "auto comment" features weren't tied together as a single option...
//z 2013-09-16 09:31:51 IS2120@BG57IV3 T1325032855.K.F3639569208[T10,L94,R5,V63]
4. vc 版本 宏
_MSC_VER
is what you need. You can also examine visualc.hpp in any recent boost install for some usage examples.
Some values for the more recent versions of the compiler are:
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005)
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio 2003)
MSVC++ 7.0 _MSC_VER == 1300
MSVC++ 6.0 _MSC_VER == 1200
MSVC++ 5.0 _MSC_VER == 1100
The version number above of course refers to the major version of your Visual studio you see in the about box, not to the year in the name.
cl.exe /?
will give a hint of the used version, e.g.:
c:\program files (x86)\microsoft visual studio 11.0\vc\bin>cl /?
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x86
.....
//z 2013-09-16 09:34:12 IS2120@BG57IV3 T576140855 .K.F4155626214[T8,L77,R2,V63]
5. 一些预定义的宏
Names the predefined ANSI C and Microsoft C++ implementation macros.
The compiler recognizes predefined ANSI C macros and the Microsoft C++ implementation provides several more. These macros take no arguments and cannot be redefined. Some of the predefined macros listed below are defined with multiple values. See the following tables for more information.
Macro | Description |
---|---|
__DATE__ | The compilation date of the current source file. The date is a string literal of the form Mmm dd yyyy. The month name Mmm is the same as for dates generated by the library function asctime declared in TIME.H. |
__FILE__ | The name of the current source file. __FILE__ expands to a string surrounded by double quotation marks. To ensure that the full path to the file is displayed, use /FC (Full Path of Source Code File in Diagnostics). You can create your own wide string version of __FILE__ as follows: #include <stdio.h> #define WIDEN2(x) L ## x #define WIDEN(x) WIDEN2(x) #define __WFILE__ WIDEN(__FILE__) wchar_t *pwsz = __WFILE__; int main() {} |
__LINE__ | The line number in the current source file. The line number is a decimal integer constant. It can be altered with a #line directive. |
__STDC__ | Indicates full conformance with the ANSI C standard. Defined as the integer constant 1 only if the /Za compiler option is given and you are not compiling C++ code; otherwise is undefined. |
__TIME__ | The most recent compilation time of the current source file. The time is a string literal of the form hh:mm:ss. |
__TIMESTAMP__ | The date and time of the last modification of the current source file, expressed as a string literal in the form Ddd Mmm Date hh:mm:ss yyyy, where Ddd is the abbreviated day of the week and Date is an integer from 1 to 31. |
Macro | Description |
---|---|
_ATL_VER | Defines the ATL version. |
_CHAR_UNSIGNED | Default char type is unsigned. Defined when /J is specified. |
__CLR_VER | Defines the version of the common language runtime used when the application was compiled. The value returned will be in the following format: Mmmbbbbb where,
// clr_ver.cpp // compile with: /clr using namespace System; int main() { Console::WriteLine(__CLR_VER); } |
__cplusplus_cli | Defined when compiling with /clr, /clr:pure, or /clr:safe. Value of __cplusplus_cli is 200406. __cplusplus_cli is in effect throughout the translation unit. // cplusplus_cli.cpp // compile with: /clr #include "stdio.h" int main() { #ifdef __cplusplus_cli printf("%d\n", __cplusplus_cli); #else printf("not defined\n"); #endif } |
__COUNTER__ | Expands to an integer starting with 0 and incrementing by 1 every time it is used in a compiland. __COUNTER__ remembers its state when using precompiled headers. If the last __COUNTER__ value was 4 after building a precompiled header (PCH), it will start with 5 on each PCH use. __COUNTER__ lets you generate unique variable names. You can use token pasting with a prefix to make a unique name. For example: // pre_mac_counter.cpp #include <stdio.h> #define FUNC2(x,y) x##y #define FUNC1(x,y) FUNC2(x,y) #define FUNC(x) FUNC1(x,__COUNTER__) int FUNC(my_unique_prefix); int FUNC(my_unique_prefix); int main() { my_unique_prefix0 = 0; printf_s("\n%d",my_unique_prefix0); my_unique_prefix0++; printf_s("\n%d",my_unique_prefix0); } |
__cplusplus | Defined for C++ programs only. |
_CPPLIB_VER | Defined if you include any of the C++ Standard Library headers; reports which version of the Dinkumware header files are present. |
_CPPRTTI | Defined for code compiled with /GR (Enable Run-Time Type Information). |
_CPPUNWIND | Defined for code compiled with /GX (Enable Exception Handling). |
_DEBUG | Defined when compiling with /LDd, /MDd, and /MTd. |
_DLL | Defined when /MD or /MDd (Multithread DLL) is specified. |
__FUNCDNAME__ | Valid only within a function and returns the decorated name of the enclosing function (as a string). __FUNCDNAME__ is not expanded if you use the /EP or /P compiler option. |
__FUNCSIG__ | Valid only within a function and returns the signature of the enclosing function (as a string). __FUNCSIG__ is not expanded if you use the /EP or /P compiler option. On a 64-bit operating system, the calling convention is __cdecl by default. |
__FUNCTION__ | Valid only within a function and returns the undecorated name of the enclosing function (as a string). __FUNCTION__ is not expanded if you use the /EP or /P compiler option. |
_INTEGRAL_MAX_BITS | Reports the maximum size (in bits) for an integral type. // integral_max_bits.cpp #include <stdio.h> int main() { printf("%d\n", _INTEGRAL_MAX_BITS); } |
_M_ALPHA | Defined for DEC ALPHA platforms (no longer supported). |
_M_CEE | Defined for a compilation that uses any form of /clr (/clr:oldSyntax, /clr:safe, for example). |
_M_CEE_PURE | Defined for a compilation that uses /clr:pure. |
_M_CEE_SAFE | Defined for a compilation that uses /clr:safe. |
_M_IX86 | Defined for x86 processors. See Values for _M_IX86 for more details. |
_M_IA64 | Defined for Itanium Processor Family 64-bit processors. |
_M_IX86_FP | Expands to a value indicating which /arch compiler option was used:
|
_M_MPPC | Defined for Power Macintosh platforms (no longer supported). |
_M_MRX000 | Defined for MIPS platforms (no longer supported). |
_M_PPC | Defined for PowerPC platforms (no longer supported). |
_M_X64 | Defined for x64 processors. |
_MANAGED | Defined to be 1 when /clr is specified. |
_MFC_VER | Defines the MFC version. For example, 0x0700 represents MFC version 7. |
_MSC_BUILD | Evaluates to the revision number component of the compiler's version number. The revision number is the fourth component of the period-delimited version number. For example, if the version number of the VC++ compiler is 15.00.20706.01, the _MSC_BUILD macro evaluates to 1. |
_MSC_EXTENSIONS | This macro is defined when compiling with the /Ze compiler option (the default). Its value, when defined, is 1. |
_MSC_FULL_VER | Evaluates to the major, minor, and build number components of the compiler's version number. The major number is the first component of the period-delimited version number, the minor number is the second component, and the build number is the third component. For example, if the version number of the VC++ compiler is 15.00.20706.01, the _MSC_FULL_VERmacro evaluates to 150020706. Type cl /? at the command line to view the compiler's version number. |
_MSC_VER | Evaluates to the major and minor number components of the compiler's version number. The major number is the first component of the period-delimited version number and the minor number is the second component. For example, if the version number of the VC++ compiler is 15.00.20706.01, the _MSC_VER macro evaluates to 1500. |
__MSVC_RUNTIME_CHECKS | Defined when one of the /RTC compiler options is specified. |
_MT | Defined when /MD or /MDd (Multithreaded DLL) or /MT or /MTd (Multithreaded) is specified. |
_NATIVE_WCHAR_T_DEFINED | Defined when /Zc:wchar_t is used. |
_OPENMP | Defined when compiling with /openmp, returns an integer representing the date of the OpenMP specification implemented by Visual C++. // _OPENMP_dir.cpp // compile with: /openmp #include <stdio.h> int main() { printf("%d\n", _OPENMP); } |
_VC_NODEFAULTLIB | Defined when /Zl is used; see /Zl (Omit Default Library Name) for more information. |
_WCHAR_T_DEFINED | Defined when /Zc:wchar_t is used or if wchar_t is defined in a system header file included in your project. |
_WIN32 | Defined for applications for Win32 and Win64. Always defined. |
_WIN64 | Defined for applications for Win64. |
_Wp64 | Defined when specifying /Wp64. |
As shown in following table, the compiler generates a value for the preprocessor identifiers that reflect the processor option specified.
Option in Development Environment | Command-Line Option | Resulting Value |
---|---|---|
Blend | /GB | _M_IX86 = 600 (Default. Future compilers will emit a different value to reflect the dominant processor.) |
Pentium | /G5 | _M_IX86 = 500 |
Pentium Pro, Pentium II, and Pentium III | /G6 | _M_IX86 = 600 |
80386 | /G3 | _M_IX86 = 300 |
80486 | /G4 | _M_IX86 = 400 |