Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2020-06-12, 01:35
  #1
Avstängd
se rubrik, jag tror inte det går men jag hoppas och frågar därför,
anta att koden inte är online, så man kan göra ändringar automatiskt i koden, av/kommentera bort vissa delar, ersätta strängar osv

en flagga som väljer olika kod, try-catch....?

tack tack
Citera
2020-06-12, 01:55
  #2
Medlem
Covids avatar
https://www.geeksforgeeks.org/catch-...nversion-in-c/

Citat:
Ursprungligen postat av zaaghi
se rubrik, jag tror inte det går men jag hoppas och frågar därför,
anta att koden inte är online, så man kan göra ändringar automatiskt i koden, av/kommentera bort vissa delar, ersätta strängar osv

en flagga som väljer olika kod, try-catch....?

tack tack
Citera
2020-08-06, 10:43
  #3
Medlem
Wintersmiths avatar
Citat:
Ursprungligen postat av zaaghi
se rubrik, jag tror inte det går men jag hoppas och frågar därför,
anta att koden inte är online, så man kan göra ändringar automatiskt i koden, av/kommentera bort vissa delar, ersätta strängar osv

en flagga som väljer olika kod, try-catch....?

tack tack
Vet inte om jag förstår frågan rätt men med hjälp av #define kan du kan du lätt byta ut text i programmet och det kan du använda för att definiera vilken typ som ska användas till exempel.

Kod:
#define mytype double

mytype a = 1;
mytype b = 2;

mytype c = a * b;
Citera
2020-08-06, 13:45
  #4
Medlem
kaks avatar
Citat:
Ursprungligen postat av Wintersmith
Vet inte om jag förstår frågan rätt men med hjälp av #define kan du kan du lätt byta ut text i programmet och det kan du använda för att definiera vilken typ som ska användas till exempel.

Kod:
#define mytype double

mytype a = 1;
mytype b = 2;

mytype c = a * b;

Naturligtvis skall inte en define användas. I detta fall skall du använda en typedef.
Sen är det sällan så enkelt att byta typ.
Andra specificerare måsta till i scanf/printf. Man måste anropa rätt version av strtof/strtod, m.m.
Mycket sånt är lättare i C++, där standardbiblioteket har överlagrade eller tempate-iserade funktioner.
I C får man använda preprocessorn och "generic selection" för att åstadkomma något liknande.
Citera
2020-08-06, 20:04
  #5
Medlem
Wintersmiths avatar
Citat:
Ursprungligen postat av kak
Naturligtvis skall inte en define användas. I detta fall skall du använda en typedef.
Sen är det sällan så enkelt att byta typ.
Andra specificerare måsta till i scanf/printf. Man måste anropa rätt version av strtof/strtod, m.m.
Mycket sånt är lättare i C++, där standardbiblioteket har överlagrade eller tempate-iserade funktioner.
I C får man använda preprocessorn och "generic selection" för att åstadkomma något liknande.
Du har rätt. En typdef är så klart bättre i det här fallet.
Citera
2020-08-07, 00:22
  #6
Avstängd
Citat:
Ursprungligen postat av kak
Naturligtvis skall inte en define användas. I detta fall skall du använda en typedef.
Sen är det sällan så enkelt att byta typ.
Andra specificerare måsta till i scanf/printf. Man måste anropa rätt version av strtof/strtod, m.m.
Mycket sånt är lättare i C++, där standardbiblioteket har överlagrade eller tempate-iserade funktioner.
I C får man använda preprocessorn och "generic selection" för att åstadkomma något liknande.

Kan man inte använda en flagga när man kallar olika funktioner? Och köra en enkel if/else som väljer rätt funktion med rätt typ?
Citera
2020-08-07, 00:45
  #7
Medlem
kaks avatar
Citat:
Ursprungligen postat av shotor
Kan man inte använda en flagga när man kallar olika funktioner? Och köra en enkel if/else som väljer rätt funktion med rätt typ?
I en del fall kanske man kan det, men varför skulle man vilja fatta detta beslut under runtime?
Dessutom är det inte alltid möjligt (eller onödigt krångligt).
T.ex måste både koden i if- och i else-blocket kompilera utan fel oavsett val av typ.
Citera
2020-08-07, 01:14
  #8
Avstängd
Citat:
Ursprungligen postat av kak
I en del fall kanske man kan det, men varför skulle man vilja fatta detta beslut under runtime?
Dessutom är det inte alltid möjligt (eller onödigt krångligt).
T.ex måste både koden i if- och i else-blocket kompilera utan fel oavsett val av typ.

Jag vill inte fatta beslutet under runtime, jag skriver ett program som genererar kod och vill att denna kod ska kunna vara både float och double, float till inbyggda system och double till PC. Koden som genereras kallar en massa funktioner och jag vill att dessa funktioner ska kunna hantera båda fallen på ett så enkelt sätt som möjligt, men fortfarande vara snabbt för inbyggda system.

Så antingen använder jag typedef och flagga när jag skriver funktionerna eller så skriver jag funktioner för t.ex. float och försöker göra så att jag kan ändra dem till double genom att läsa in filen och ändra automatiskt, det senare med ett annat program så jag får två grupper med funktioner.

typedef och flagga måste vara enklare, påverkar det hastigheten att göra så?
Citera
2020-08-07, 01:22
  #9
Avstängd
Citat:
Ursprungligen postat av kak
I en del fall kanske man kan det, men varför skulle man vilja fatta detta beslut under runtime?
Dessutom är det inte alltid möjligt (eller onödigt krångligt).
T.ex måste både koden i if- och i else-blocket kompilera utan fel oavsett val av typ.

går det att köra typedef eller define i ett if/else-block?

if(flagga)
typedef float hej
else
typedef double hej
end
Citera
2020-08-07, 01:29
  #10
Medlem
kaks avatar
Citat:
Ursprungligen postat av shotor
går det att köra typedef eller define i ett if/else-block?

if(flagga)
typedef float hej
else
typedef double hej
end
Ja det kan du, men det gör inte det du tror.
Du skapar två olika typer med samma namn, men med synlighet enbart i sitt respektive lokala block.
D.v.s. efter if/else satsen är båda typerna bortglömda.
Det du vill göra är
Kod:
#ifdef USE_FLOAT
typedef float hej;
#else
typedef double hej;
#endif 
Citera
2020-08-07, 01:37
  #11
Medlem
kaks avatar
Citat:
Ursprungligen postat av shotor
Jag vill inte fatta beslutet under runtime, jag skriver ett program som genererar kod och vill att denna kod ska kunna vara både float och double, float till inbyggda system och double till PC. Koden som genereras kallar en massa funktioner och jag vill att dessa funktioner ska kunna hantera båda fallen på ett så enkelt sätt som möjligt, men fortfarande vara snabbt för inbyggda system.

Så antingen använder jag typedef och flagga när jag skriver funktionerna eller så skriver jag funktioner för t.ex. float och försöker göra så att jag kan ändra dem till double genom att läsa in filen och ändra automatiskt, det senare med ett annat program så jag får två grupper med funktioner.

typedef och flagga måste vara enklare, påverkar det hastigheten att göra så?
Om du vill välja vid kompilering måste du använda #if m.fl.
Eventuellt "generic selection" ifrån C11.
Varför vill du använda float? Är det pga prestande eller minnesåtgång?
Citera
2020-08-07, 02:17
  #12
Avstängd
Citat:
Ursprungligen postat av kak
Om du vill välja vid kompilering måste du använda #if m.fl.
Eventuellt "generic selection" ifrån C11.
Varför vill du använda float? Är det pga prestande eller minnesåtgång?

prestanda
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback