Hi, could anyone help me please? i'm not sure how to write a swap(t, x, y) macro that interchange the x and y arguments of type t...
Thanks;
Hi, could anyone help me please? i'm not sure how to write a swap(t, x, y) macro that interchange the x and y arguments of type t...
Thanks;
Sounds like a homework assignment. Well, why don't you show us what you have so far?
i don't think most standard compilers support programmers with more than 4 red boxes - Misplaced
It is my sacred duity to stand in the path of the flood of ignorance and blatant stupidity... - quzah
Such pointless tricks ceased to be interesting or useful when we came down from the trees and started using higher level languages. - Salem
It's not a homework assignment. I just started C programming and i wanted to know how to write functions in macro that can allow any data type that's all.
Well, what do you have? Do you know how to make a macro? If so try something and post and I am sure more people will help you from there.
i don't think most standard compilers support programmers with more than 4 red boxes - Misplaced
It is my sacred duity to stand in the path of the flood of ignorance and blatant stupidity... - quzah
Such pointless tricks ceased to be interesting or useful when we came down from the trees and started using higher level languages. - Salem
Well, i just know to write a function like this...
But i'm not sure how to do a swap function...Code:#define isBigger(a,b) (((a) > (b))? (a):(b))
Well, a swap function typically involves 3 variables; the two you are swapping and one used as a temp store. To perform a swap in code you would(assuming you had three variables named x, y, z and you wanted to swap x and y):
And that would swap the values of variables x and y. Now just attempt to apply that to a macro and you'll be there.Code:z = x x = y y = z
i don't think most standard compilers support programmers with more than 4 red boxes - Misplaced
It is my sacred duity to stand in the path of the flood of ignorance and blatant stupidity... - quzah
Such pointless tricks ceased to be interesting or useful when we came down from the trees and started using higher level languages. - Salem
i see, so is this correct?
Code:#define swap(t, a, b) (t temp=a; a=b; b=temp;)
yep, just what exactly are you hoping to use, either t or temp. It has to be one or the other. According to you macro declaration it should be t so:
Code:#define swap(t, a, b) (t =a; a=b; b=t;)
i don't think most standard compilers support programmers with more than 4 red boxes - Misplaced
It is my sacred duity to stand in the path of the flood of ignorance and blatant stupidity... - quzah
Such pointless tricks ceased to be interesting or useful when we came down from the trees and started using higher level languages. - Salem
sorry, i confussed you. i wanted the t enter in the swap() to be the type t of the a and b arguments. Is it possible to do something like that?
I believe you can only create generic types like that in C++ using templates. For you problem I would just have the programmer pass the macro three variables like so:
I will look around some more and see if I can find a reference to templating in C but I do not believe it can be done like how you want it to.Code:#include <stdio.h> #include <string.h> #define swap(x, y, z) (z) = (x); (x) = (y); (y) = (z); int main() { int x = 0, y = 1, z; float a = 2.0, b = 3.5, c; printf("The value before swap of x= %i, y= %i\n", x, y); swap(x, y, z); printf("The value after swap of x= %i, y= %i\n", x, y); printf("The value before swap of a= %f, b= %f\n", a, b); swap(a, b, c); printf("The value after swap of a= %f, b= %f\n", a, b); getchar(); return 0; }
i don't think most standard compilers support programmers with more than 4 red boxes - Misplaced
It is my sacred duity to stand in the path of the flood of ignorance and blatant stupidity... - quzah
Such pointless tricks ceased to be interesting or useful when we came down from the trees and started using higher level languages. - Salem
Thanks for your help
http://www.eskimo.com/~scs/C-faq/q10.3.html
http://www.eskimo.com/~scs/C-faq/q10.4.html
Code:#include <stdio.h> #define swap(t,x,y) \ do { \ t a = (x); \ (x) = (y); \ (y) = a; \ } while(0) int main(void) { int i = 42, j = -1, k = 9, *p = &i, *q = &j; float f = 1.23, g = 4.56; printf("i = %d, j = %d | k = %d | f = %g, g = %g | p = %p, q = %p\n", i, j, k, f, g, (void*)p, (void*)q); swap(int, i, j); swap(float, f, g); swap(int, k, k); if ( k ) swap(int*, p, q); else puts("message"); printf("i = %d, j = %d | k = %d | f = %g, g = %g | p = %p, q = %p\n", i, j, k, f, g, (void*)p, (void*)q); return 0; } /* my output i = 42, j = -1 | k = 9 | f = 1.23, g = 4.56 | p = 0012FF88, q = 0012FF84 i = -1, j = 42 | k = 9 | f = 4.56, g = 1.23 | p = 0012FF84, q = 0012FF88 */
7. It is easier to write an incorrect program than understand a correct one.
40. There are two ways to write error-free programs; only the third one works.*
Thanks for ur solution!
Nice, but can you spot the bug in Dave's solution?
There's a hint in the clc FAQ
If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
If at first you don't succeed, try writing your phone number on the exam paper.
Thanks for the tip