2011-02-08 5 views

Répondre

2

Basé sur l'utilisation et sur le fait que c n'est pas utilisé dans la macro, il semble qu'il y ait une faute de frappe dans la macro. Au lieu d'utiliser int, il faut dire c:

#define swap(a,b,c)(c t;t=a;a=b;b=t;); 

En fait, alors que cette « fixer » vous donnera l'idée générale de la macro, il ne sera pas compiler. S'il vous plaît voir Peyman's answer qui vous dit comment l'écrire correctement. Fondamentalement, il ressemble à un moyen d'échanger deux variables a, b du type c.

Dans votre cas, la sortie serait:

20 10 

La façon dont cet algorithme fonctionne swapping est simple. Fondamentalement, vous voulez copier a en b et b en a. Cependant, si vous copiez simplement b dans a, vous perdrez a, et vous serez coincé avec deux copies de b.

Au lieu de simplement copier b dans a, vous devez d'abord enregistrer une copie de a dans une variable temporaire appelé t, puis copiez b dans a, puis copiez t (qui détient la valeur originale de a) dans b. Lorsque vous avez terminé, vous pouvez oublier t.

+0

Vous ne pouvez pas mettre des instructions entre parenthèses ou déclarer des variables dans des expressions. La macro a besoin d'un peu plus de travail. –

+0

@Chris: bien sûr, vous avez absolument raison. Je vais mettre une référence à votre réponse dans la mienne. Tandis que votre réponse explique comment le compiler, le mien donne un peu plus d'aperçu de comment cela fonctionne. –

+0

@Chris: évidemment, je veux dire Peyman, pas le vôtre, puisque vous n'avez pas répondu à la question. –

6

Mieux vaut réécrire votre macro comme ceci:

#define swap(a, b, type) \ 
     do { \ 
       type t = a; \ 
       a = b; \ 
       b = t; \ 
     } while (0) 
+0

Pas "mieux", _necessary_. La macro OP ne devrait pas compiler. –

Questions connexes