carlosmay |
» 2016-01-05 19:08:59 Myślałem, że chodzi o przekazanie argumentu. #define MAKRO(c, n, format){ if(format== 0) printf("%s %i", c, n);\ if(format == 1)printf("%s %f", c, n);\ }
char * slowo = "Kilo to iloczyn jednostki x "; int mnoznik = 1000; int format = 0; MAKRO( slowo, mnoznik, format ); printf( "\n" ); MAKRO( "Liczba PI wynosi ", 3.14, 1 );
Chyba tak można. Przynajmniej VS to łyka. |
|
mati220 Temat założony przez niniejszego użytkownika |
» 2016-01-05 19:36:22 Chyba by działało ale jeśli byś zmieniał typ zmiennej to też musisz zmienić zmienną format. Ciekawe czy da się jakoś to inaczej rozwiązać. |
|
1aam2am1 |
» 2016-01-05 21:35:46 #define MAKRO(c, x) {Point a; a.MyFunction(c, x);}
struct Point { template < typename U > static typename std::enable_if < std::is_same < U, int >::value >::type MyFunction( const char * txt, const U & x ) { printf( "%s %i\n", txt, x ); } template < typename U > static typename std::enable_if < std::is_same < U, float >::value >::type MyFunction( const char * txt, const U & x ) { printf( "%s %f\n", txt, x ); } };
int main() { int i = 100; float z = 52.001; MAKRO( "To jest int2", i ); MAKRO( "To jest float", z ); }
:) |
|
mati220 Temat założony przez niniejszego użytkownika |
» 2016-01-16 14:53:30 Tyle, że u mnie "nie działa" wgl typename ewentualnie typeid. Wywala błąd. |
|
mati220 Temat założony przez niniejszego użytkownika |
» 2016-01-16 17:14:27 #include <stdio.h> #include <string.h>
#define MAKRO(Liczba,ciag) do{\ if(strcmp(#ciag,"int")==0)\ printf("Wyrazenie %s ma wartosc %d w linii nr %d w pliku %s\n",#Liczba,(Liczba),__LINE__,__FILE__);\ if(strcmp(#ciag,"logn int")==0)\ printf("Wyrazenie %s ma wartosc %ld w linii nr %d w pliku %s\n",#Liczba,(Liczba),__LINE__,__FILE__);\ if(strcmp(#ciag,"float")==0)\ printf("Wyrazenie %s ma wartosc %f w linii nr %d w pliku %s\n",#Liczba,(Liczba),__LINE__,__FILE__);\ if(strcmp(#ciag,"unsigned")==0)\ printf("Wyrazenie %s ma wartosc %u w linii nr %d w pliku %s\n",#Liczba,(Liczba),__LINE__,__FILE__);\ if(strcmp(#ciag,"char")==0)\ printf("Wyrazenie %s ma wartosc %c w linii nr %d w pliku %s\n",#Liczba,(Liczba),__LINE__,__FILE__);\ if(strcmp(#ciag,"double")==0)\ printf("Wyrazenie %s ma wartosc %lf w linii nr %d w pliku %s\n",#Liczba,(Liczba),__LINE__,__FILE__);\ }while(0)
int main() { int a = 13; MAKRO( a, int ); return 0; }
Wymyśliłem coś takiego ale wywala ostrzeżenia np: |22| warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'int' [-Wformat]| Tak dla każdego typu różnego od zmiennej. |
|
Monika90 |
» 2016-01-16 20:23:01 W zadaniu napisane jest że mam napisać makro które przyjmuje dwa argumenty. Jednym jest wyrażenie dowolnego typu a drugim ciąg formatujący tego wyrażenia. |
To może zrób tak jak napisano w treści zdania, czyli: PRINT(115, "%i"); PRINT(117.5, "%g"); itp... |
|
1 « 2 » |