预处理器宏的Stange错误

dat*_*ili 0 c++

我改变了代码风格,我希望它能帮助 http://www.cs.bell-labs.com/cm/cs/pearls/spacemod.cpp

#include <iostream>
using namespace std;

#define MEASURE(T,  text)
{        \
   int i;
cout<<text<<"\t";                       \

 cout<<sizeof(T)<<"\t";                     \
 int lastp=0;\
  for ( i=0;i<11;i++){                \
      T *p=new T;                                  \
      int thisp=(int)p;                                   \
       if (lastp!=0)   cout<<" "<<thisp-lastp;           \
       lastp=thisp;                             \
  }                                                                     \
  cout<<"n";\
  }                                                     \
  using namespace std;
template <class T>
void measure(char *text)
{
    cout<<"measure"<<text<<"\t";  
    cout<<sizeof(T)<<"\n";
}
int main(){



     return 0;
}
Run Code Online (Sandbox Code Playgroud)

它只有一个错误

1>c:\users\david\documents\visual studio 2010\projects\measure\measure.cpp(5): error C2447: '{' : missing function header (old-style formal list?)
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 9

我很确定你需要一个\最后#define一行本身以及int i;该宏中可能还有空行(我不确定).

我怀疑在\你的using陈述之前的那一行也是狡猾的.

但是,我绝对肯定的一点是,使用内联函数比使用#define宏更好.

虽然inline不能保证它实际上是内联的,但我总是倾向于优化编译器.

和代码宏,我在C++中非常重视,特别是对于像这样的复杂事情:-)