#include <iostream> using namespace std; int main() { cout << "Standerd Clib" << __STDC_HOSTED__ << endl; cout << "Standerd C" << __STDC__ << endl; //cout << "C Standerd version " << __STDC_VERSION__ << endl; //cout << "ISO/IEC" << __STDC_ISO_10646__ << endl; return 0; }在g++ 2.3.3版本中后面两行不能编译通过,说明在g++ 2.3.3版本中可能没有给出这两个宏的定义。
#include <iostream> using namespace std; const char* hello() { return __func__; } const char* world() { return __func__; } int main() { cout << hello() << world() << endl; return 0; }
const char* hello() { static const char* __func__ = "hello"; renturn __func__; }
#include <iostream> using namespace std; struct TestStruct { TestStruct(): name(__func__) { } const char* name; }; int main() { TestStruct ts; cout << ts.name << endl; renturn 0; }
#ifndef THIS_HEADER #define THIS_HEADER //一些头文件定义 #endif
#include <stdio.h> #define LOG(...) {\ fprintf(stderr,"%S:Line %d:\t"), __FILE__, __LINE__};\ fprintf(stderr,__VA__ARGS__);\ fprintf(stderr,"\n");\ } int main() { int x=3; LOG("x=%d",x); }
6、扩展的整型
C++11中一共只定义了5种标准的有符号整型:
signed char
short int
int
long int
long long int
标准同时规定,每一种有符号整型都有一种对应的无符号整型版本,而且有符号整型与其对应的无符号整型具有相同的存储空间大小。
7、宏__cplusplus
在C/C++混合编写的代码中,我们经常会在头文件中看到如下的声明:
#ifdef __cplusplus extern "C"{ #endif //一些代码 #ifdef __cplusplus } #endif由于extern "C"可以抑制C++对函数名、变量名等符号进行名称重整(name mangling),因此编译出的C目标文件中的变量,函数名称等等符号都是相同的,连接器可以
#if __cplusplus < 20131103L #error "should use C++ 11 implementation" #endif
#include <cassert> using namespace std; double div(double a,double b) { assert(b != 0.000000); //断言除数必须不为零 return a/b; } int main() { double rt = div(10,0); return 0; }
#include <cassert> #include <cstring> using namespace std; template<typename t, typename u> int bit_copy(t& a, u& b) { static_assert(sizeof(b) == sizeof(a), "the parameters of bit_copy must have same width."); }; int main() { int a = 0x2468; double b; bit_copy(a,b); return 0; }
在编译的过程中就会出现如下的错误信息: