测量来自编程珍珠的文本代码 [英] measure texts code from programming pearls

查看:87
本文介绍了测量来自编程珍珠的文本代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有编程珍珠的代码

  #include< iostream> 
//#include< string>
using namespace std;
template< class T>
void measure(char * text)
{
cout<<measure<<< text<<\t
cout<< sizeof(t)<<\\\
;
}
#define MEASURE(T,text){
cout<<< text<<\t;
cout<< sizeof(T)<<\t;
int lastp = 0;
for(int i = 0; i <11; i ++){
T * p = new T;
int thisp =(int)p;
if(lastp!= 0)
cout<<<< thisp-lastp;
lastp = thisp;
}
cout<<n:
}

int main(){

return 0;
}

但有一些错误

  1> ------ Build started:项目:new_practises,配置:调试Win32 ------ 
1> practises.cpp
1> c:\users\david\documents\visual studio 2010 \projects\\\
ew_practises\practises.cpp(11):error C2143:syntax error:missing';' before'<<'
1> c:\users\david\documents \visual studio 2010 \projects\\\
ew_practises\practises.cpp(11):error C4430:missing type specifier - int假设。注意:C ++不支持default-int
1> c:\users\david\documents\visual studio 2010\projects\\\
ew_practises\practises.cpp(12):error C2143:syntax错误:缺少';'before'<<'
1> c:\users\david\documents\visual studio 2010 \projects\\\
ew_practises\practises.cpp(12):错误C4430:缺少类型说明符 - int。注意:C ++不支持default-int
1> c:\users\david\documents\visual studio 2010 \projects\\\
ew_practises\practises.cpp(12):error C2086: int cout':redefinition
1> c:\users\david\documents\visual studio 2010 \projects\\\
ew_practises\practises.cpp(11):参见cout的声明
1> c:\users\ david\documents\visual studio 2010\projects\\\
ew_practises\practises.cpp(14):error C2059:syntax error:'for'
1> c:\users\david\documents \visual studio 2010 \projects\\\
ew_practises\practises.cpp(14):error C2143:syntax error:missing')'before';'
1> c:\users\david\ documents \visual studio 2010 \projects\\\
ew_practises\practises.cpp(14):error C2143:syntax error:missing';'before'<'
1> c:\users\david \documents \visual studio 2010\projects\\\
ew_practises\practises.cpp(14):错误C4430:缺少类型说明符 - int假设。注意:C ++不支持default-int
1> c:\users\david\documents\visual studio 2010 \projects\\\
ew_practises\practises.cpp(14):error C2143:syntax错误:缺少';'前'++'
1> c:\users\david\documents\visual studio 2010 \projects\\\
ew_practises\practises.cpp(14):error C4430 :缺少类型说明符 - int假设。注意:C ++不支持default-int
1> c:\users\david\documents\visual studio 2010 \projects\\\
ew_practises\practises.cpp(14):错误C2086: int i':redefinition
1> c:\users\david\documents\visual studio 2010 \projects\\\
ew_practises\practises.cpp(14):请参见声明i
1> c:\users\ david\documents\visual studio 2010\projects\\\
ew_practises\practises.cpp(14):错误C2059:语法错误:')'
1> c:\users\david\documents \visual studio 2010 \projects\\\
ew_practises\practises.cpp(14):error C2143:syntax error:missing';'before'{'
1> c:\users\david\ document \visual studio 2010 \projects\\\
ew_practises\practises.cpp(14):error C2447:'{':missing function header(old-style formal list?)
1> c:\users \david\documents\visual studio 2010\projects\\\
ew_practises\practises.cpp(21):error C2143:syntax error:missing';'before'<<'
1> c :\users\david\documents\visual studio 2010\projects\\\
ew_practises\practises.cpp(21):错误C4430:缺少类型说明符 - int。注意:C ++不支持default-int
1> c:\users\david\documents\visual studio 2010\projects\\\
ew_practises\practises.cpp(21):错误C2086: int cout':redefinition
1> c:\users\david\documents\visual studio 2010 \projects\\\
ew_practises\practises.cpp(11):参见cout的声明
1> c:\users\ david\documents\visual studio 2010\projects\\\
ew_practises\practises.cpp(22):错误C2059:语法错误:'}'
1> c:\users\david\documents \visual studio 2010 \projects\\\
ew_practises\practises.cpp(22):error C2143:syntax error:missing';'before'}'
1> c:\users\david\ documents\visual studio 2010\projects\\\
ew_practises\practises.cpp(22):错误C2059:语法错误:'}'
1> c:\users\david\documents\visual studio 2010 \projects\\\
ew_practises\practises.cpp(24):error C2143:syntax error:missing';'before'{'
1> c:\users\david\documents \ visual studio 2010 \projects\\\
ew_practises\practises.cpp(24):错误C2447:'{':缺少函数头(旧式正式列表?)
========== Build:0 succeeded,1 failed,0 up-to-date,0 skipped ==========

我需要修复什么?

解决方案

除了Stephen的回答,我可以说#define是un-C ++ ish。当你需要一个对应于字符串或类似东西的变量名时,它变得有用。对于大部分所有其他情况,使用函数。



接下来,我必须同意DeadMG的意见,至少我太愚蠢,看不到任何理由写这个函数。但这是另一个关注点:)



如果你真的想测量一个字符串的长度,你可以使用函数 strlen



你的 MEASURE 似乎是打印出一系列11个新分配的内存地址。很好做,当你研究你的运行时的内存分配策略,但其他方面不太有用。



也不要忘记删除你有什么

  #define MEASURE(T,text){\ 
cout<< text< ;\t; \
cout<<<<<<<<<<< >



可以直接转换为模板函数:更容易编写和调试。

  template<类型名T> //假设你_need_一个变量类型的参数
void MEASURE(const T& text){
cout<< text<<\t
cout<< sizeof(T)<<\t;
//将写入的大小。一个字符。也许
//你应该使用strlen或类似的...
int lastp = 0;
for(int i = 0; i <11; i ++){
T * p = new T;
int thisp =(int)p;
if(lastp!= 0)cout<<<< thisp-lastp;
lastp = thisp;
}
cout<<n;
}


I have this code from programming pearls

#include <iostream>
//#include <string>
using namespace std;
template <class T>
void measure(char *text)
{
    cout<<"measure"<<text<<"\t";
    cout<<sizeof(t)<<"\n";
}
#define MEASURE(T,text){
cout<<text<<"\t";
 cout<<sizeof(T)<<"\t";
 int lastp=0;
  for (int i=0;i<11;i++){
      T *p=new T;
      int thisp=(int)p;
       if (lastp!=0)
            cout<<" "<<thisp-lastp;
       lastp=thisp;
  }
  cout<<"n":
  }

int main(){

     return 0;
}

but there are some mistakes

1>------ Build started: Project: new_practises, Configuration: Debug Win32 ------
1>  practises.cpp
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(11): error C2143: syntax error : missing ';' before '<<'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(11): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(12): error C2143: syntax error : missing ';' before '<<'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(12): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(12): error C2086: 'int cout' : redefinition
1>          c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(11) : see declaration of 'cout'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(14): error C2059: syntax error : 'for'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(14): error C2143: syntax error : missing ')' before ';'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(14): error C2143: syntax error : missing ';' before '<'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(14): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(14): error C2143: syntax error : missing ';' before '++'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(14): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(14): error C2086: 'int i' : redefinition
1>          c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(14) : see declaration of 'i'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(14): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(14): error C2143: syntax error : missing ';' before '{'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(14): error C2447: '{' : missing function header (old-style formal list?)
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(21): error C2143: syntax error : missing ';' before '<<'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(21): error C2086: 'int cout' : redefinition
1>          c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(11) : see declaration of 'cout'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(22): error C2059: syntax error : '}'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(22): error C2143: syntax error : missing ';' before '}'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(22): error C2059: syntax error : '}'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(24): error C2143: syntax error : missing ';' before '{'
1>c:\users\david\documents\visual studio 2010\projects\new_practises\practises.cpp(24): error C2447: '{' : missing function header (old-style formal list?)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

What do I need to fix?

解决方案

In addition to Stephen's answer, I can say that #define is un-C++ish. It becomes useful when you need a variable name that corresponds to a string or something the like. For mostly all other cases, use functions.

Next to that, I must concur with DeadMG's opinion that at least I'm too stupid to see any reason to write this function. But that's another concern :)

If you actually want to measure the length of a string, you can use the function strlen.

What your MEASURE seems to do is print out a series of 11 newly allocated memory addresses. Nice to do when you are studying the memory allocation strategy of your runtime, but otherwise not too useful.

Also don't forget to delete what you have newed.

#define MEASURE(T,text) {\
    cout<<text<<"\t";\
    cout<<sizeof(T)<<"\t";\
    ...

can be directly translated into a template function: way easier to write, and to debug.

template< typename T > // assuming you _need_ a variable type of arguments
void MEASURE( const T& text) {
    cout<<text<<"\t";
    cout<<sizeof(T)<<"\t"; 
    // will write the size of e.g. one character.  Maybe
    // you should use strlen or the like...
    int lastp=0;
    for (int i=0;i<11;i++){
        T *p=new T;
        int thisp=(int)p;
        if (lastp!=0) cout<<" "<<thisp-lastp;
        lastp=thisp;
    }
    cout<<"n";
}

这篇关于测量来自编程珍珠的文本代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆