Forum: PC-Programmierung Rechnen mit Makros


von Patrick (Gast)


Lesenswert?

Hallo Leute,

ich hab nur eine kurze Frage, die wahrscheinlich auch nur einer kurzen 
Antwort bedarf:

ich habe zwei Makros:
#define MAX_CYCLE_TIME 60  // a cycle can not last longer than 60s
#define LOG_CYCLE_POINTS_INTERVAL 0.01 // Log all system data every 10ms

Daraus berechne ich mir die benötigte Puffergröße (hier also 6000 = 60 
/0.01)

Ich wollte mir ein neues Makro einführen, ungefähr so:
#define LOGBUFFERSIZE  MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL

Geht das nicht? Geht´s anders? Ich bekomme kein Ergebnis.

Danke für eure Hilfe!

Grüße,

patrick

von Andreas S (Gast)


Lesenswert?

mach es so:

#define LOGBUFFERSIZE  ((float)MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL)

Gruß

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Hi,

1. Makros aus mehr als einer Zahl sollte man immer klammern, damit man 
auch den gewünschten Effekt bekommt.

2. casting-probleme, weil der wohl (int) draus macht:
1
 printf("\n%i", (int)((float)60/(float)0.01));
so gehts.
Das zweite (float) kann man sich ev. sparen.


VG,
/th.

von Patrick (Gast)


Lesenswert?

Hallo Leute,

da der Buffer später ein int möchte, hab ich´s so gemacht:

#define LOGBUFFERSIZE 
((int)((float)MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL))

double  Time_Buffer  [LOGBUFFERSIZE];

Es funktioniert!

Vielen Dank für eure schnellen Antworten!
Mit ein bisschen probieren hätt ich schon auch drauf kommen können!

Grüße,

Patrick

von Karl H. (kbuchegg)


Lesenswert?

Patrick schrieb:

> #define MAX_CYCLE_TIME 60  // a cycle can not last longer than 60s
> #define LOG_CYCLE_POINTS_INTERVAL 0.01 // Log all system data every 10ms
>
> Daraus berechne ich mir die benötigte Puffergröße (hier also 6000 = 60
> /0.01)

Soweit so gut

> Ich wollte mir ein neues Makro einführen, ungefähr so:
> #define LOGBUFFERSIZE  MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL

Nicht 'ungefähr'
Hast du es so, oder hast du es nicht so

> Geht das nicht? Geht´s anders? Ich bekomme kein Ergebnis.

Was heißt 'kein Ergebnis'. In welchem Zusammenhang? Wo wird das Makro 
verwendet?


(Vergiss die Antworten, die sich um den cast drehen. So wie du das hast, 
passt das schon)

von Patrick (Gast)


Lesenswert?

Hallo Karl Heinz,

ich hab wieder mal nicht gut aufgepasst und alles viel zu umständlich 
gemacht!

Ich hatte es genau so geschrieben:

   #define MAX_CYCLE_TIME 60  // a cycle can not last longer than 60s
   #define LOG_CYCLE_POINTS_INTERVAL 0.01 // Log all system data every 
10ms
   #define LOGBUFFERSIZE  MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL

Das ist tatsächlich auch richtig so, danke Karl Heinz!

Aber:
In Hinsicht auf
   double Time_Buffer [LOGBUFFERSIZE];
muss aber dann doch noch gecastet werden:
   #define LOGBUFFERSIZE (int)(MAX_CYCLE_TIME/LOG_CYCLE_POINTS_INTERVAL)

Funktioniert einwandfrei!

Vielen Dank!

Grüße,

Patrick

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.