2010-07-25 9 views
0

i ont changé le style de code et ASLO j'espère que cela aidera http://www.cs.bell-labs.com/cm/cs/pearls/spacemod.cpperreur Stange avec préprocesseur macro

#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; 
} 

il n'a qu'une seule erreur

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

s'il vous plaît voir http://www.cs.bell-labs.com/cm/cs/pearls/spacemod.cpp –

+0

double possible [mesure code textes de perles de programmation] (http://stackoverflow.com/questions/3329142/measure-texts-code-from-programming-pearls) – interjay

+1

@sbi: Bien que ce soit normalement vrai, dans ce cas, la réponse acceptée sur les anciens résoud question la question exprimée ici aussi, donc je ne vois pas la valeur d'avoir cette question ouverte. En fait, il ressemble à davit-datuashvili simplement copier/coller le code qui lui a été donné dans cette réponse et ensuite changé la position des barres obliques inverses pour une raison étrange, provoquant les erreurs. – interjay

Répondre

9

Je suis certain que vous avez besoin d'une \ à la fin de lui-même, ainsi que le int i;, et peut-être les lignes vides ligne #define dans cette macro aussi bien (je ne suis pas sûr à ce sujet).

Je soupçonne que le \ sur la ligne précédant votre instruction using est également douteux.

Cependant, une chose dont je suis absolument certain que vous seriez mieux d'utiliser les fonctions inline que #define macros.

Alors que inline ne le fait pas garantie qu'il est en fait inline, je tendance à toujours laisser l'optimisation jusqu'à compilateur.

et macros code, je froncer les sourcils sur ce assez fortement en C++, en particulier pour les choses complexes comme celui-ci :-)

0

Il vous manque un caractère de continuation de ligne sur la première ligne de la macro. Vous pouvez voir ce que vos macros développent en exécutant le préprocesseur (par exemple, utilisez G ++ avec l'indicateur -E).

Cela dit, je ne vois pas pourquoi vous avez besoin d'une macro en premier lieu. Pourquoi ne pas utiliser une fonction de modèle simple?

0

Ok, son caractère de continuation après la #define que vous avez obtenu des answears prevoius. Vous devriez essayer d'éviter de définir autant que possible, exactement parce qu'ils peuvent conduire à de telles erreurs qui ne veulent rien dire. Je pense que vous l'avez fait pour améliorer les performances, mais il existe une meilleure façon de procéder. Définissez cette fonction comme une fonction "en ligne" dans l'en-tête. Vous pouvez en savoir plus sur les fonctions inline par exemple ici:

Questions connexes