70,020
社区成员




#define VAR(i) p ## i
#define ARR(i) p[ ## i ##]
int main()
{
{
int p2 = 6;
int q = VAR(2); // OK
}
{
int p[4];
p[2] = 6;
int q = ARR(2); // Error
}
return 0;
}
//我把过儿在2楼的程序补充下
#include<stdio.h>
#define paster( n ) printf( "token" #n " = %d", token##n )
#define definer1( n ) printf( "token" #n " = %d", tokenn )
#define definer2( n ) printf( "token" #n " = %d", token n )
"token" #n " = %d", 相当于"tokenn = %d", " #n " 相当于 n
int main()
{
int token8 = 100;
int tokenn=1; //tokenn要定义
paster( 8 );
definer1( 8 );
//definer2( 8 );//token n 定义不成一个变量所以definer2进不去。
return 0;
}
#include <iostream>
using namespace std;
template <class T>
class X
{
static X* x;
};
#define DDD(T) template <> \
X<T>* X<T>::x = NULL
DDD(int);
int main()
{
return 0;
}
template <class T>
class X
{
static X* x;
};
//#define DDD(T) X<T>* X<T>::x = NULL
#define DDD(T) X< ## T ## >* X< ## T ## >::x = NULL
DDD(int);
#include <iostream>
#include <string>
using namespace std;
#define SSSR(name) "name is " ## name
int main()
{
string str = SSSR("abc");
cout << str << endl;
return 0;
}
#define paster( n ) printf( "token" #n " = %d", token##n )
#define definer1( n ) printf( "token" #n " = %d", tokenn )
#define definer2( n ) printf( "token" #n " = %d", token n )
main()
{
int token8 = 100;
paster( 8 );
definer1( 8 );
definer2( 8 );
}
gcc -E 可以看到预编译的结果
printf( "token" "8" " = %d", token8 ) ;
printf( "token" "8" " = %d", tokenn ) ;
printf( "token" "8" " = %d", token 8 ) ;
明白了吗?如果再编译的话definer1 definer2 的语句是会报错的