Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Makro wyświetlające dane

Ostatnio zmodyfikowano 2016-01-16 20:23
Autor Wiadomość
carlosmay
» 2016-01-05 19:08:59
Myślałem, że chodzi o przekazanie argumentu.
C/C++
#define MAKRO(c, n, format){ if(format== 0) printf("%s %i", c, n);\
  if(format == 1)printf("%s %f", c, n);\
 }

// ... main()
char * slowo = "Kilo to iloczyn jednostki x ";
int mnoznik = 1000;
int format = 0;
MAKRO( slowo, mnoznik, format ); // dla int
printf( "\n" );
MAKRO( "Liczba PI wynosi ", 3.14, 1 ); // dla float
 Chyba tak można. Przynajmniej VS to łyka.
P-142916
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ć.
P-142918
1aam2am1
» 2016-01-05 21:35:46
C/C++
#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 );
    }
   
    //tu dodaj inne typy
};




int main()
{
    int i = 100;
    float z = 52.001;
   
    MAKRO( "To jest int2", i );
   
    MAKRO( "To jest float", z );
}

:)
P-142927
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.
P-143584
mati220
Temat założony przez niniejszego użytkownika
» 2016-01-16 17:14:27
C/C++
#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.
P-143591
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...
P-143597
1 « 2 »
Poprzednia strona Strona 2 z 2