-> Hier kostenlos registrieren
Hallo!
Erst mal vielen Dank an alle die sich meinem Problem widmen.
Ich möchte zwei Strukturen auf deren Aufbau miteinander vergleichen.
Fall 1 Beispiel:
[FONT="]TYPE tstruct1 :[/FONT]
[FONT="]STRUCT[/FONT]
[FONT="] test1 : BOOL;[/FONT]
[FONT="] test2 : REAL;[/FONT]
[FONT="] test3 : BOOL;[/FONT]
[FONT="]END_STRUCT[/FONT]
[FONT="]END_TYPE[/FONT]
[FONT="] [/FONT]
[FONT="]TYPE tstruct2 :[/FONT]
[FONT="]STRUCT[/FONT]
[FONT="] test1 : BOOL;[/FONT]
[FONT="] test2 : REAL;[/FONT]
[FONT="] test3 : BOOL;[/FONT]
[FONT="]END_STRUCT[/FONT]
[FONT="]END_TYPE[/FONT]
In diesem Fall sind beide Strukturen gleich.
Fall2 Beispiel:
[FONT="]TYPE tstruct2 :[/FONT]
[FONT="]STRUCT[/FONT]
[FONT="] test1 : INT;[/FONT]
[FONT="] test2 : REAL;[/FONT]
[FONT="] test3 : BOOL;[/FONT]
[FONT="]END_STRUCT[/FONT]
[FONT="]END_TYPE[/FONT]
In diesem Fall sind die Strukturen unterschiedlich und es soll eine Fehlermeldung ausgegeben werden.
Mein erster Ansatz schaut folgendermaßen aus: Ich speichere die Größe der verwendeten Datentypen des Strukts in einem Array und vergleich diese miteinander:
[FONT="]VAR[/FONT]
[FONT="]p : POINTER TO INT;[/FONT]
[FONT="]counter: INT;[/FONT]
[FONT="]array: ARRAY [0..10] OF INT;[/FONT]
[FONT="]i: INT;[/FONT]
[FONT="]END_VAR[/FONT]
[FONT="]
[/FONT]
[FONT="] [/FONT]
[FONT="] WHILE (counter<=SIZEOF(struct_name)) DO[/FONT]
[FONT="] counter:=counter+SIZEOF(p^);[/FONT]
[FONT="] array:=SIZEOF(p^);[/FONT]
[FONT="] p:=p+SIZEOF(p^);[/FONT]
[FONT="] [/FONT][FONT="]i:=i+1;[/FONT]
[FONT="] END_WHILE[/FONT]
Nur leider funktioniert dieser Ansatz nicht, da [FONT="]SIZEOF(p^)[/FONT]immer =2 ist, egal auf welchen Datentyp er zeigt.
Es würde mich freuen wenn jemand den Fehler in meiner Lösung sieht od. wenn er einen anderen Ansatz kennt wie man das Problem besser lösen könnte.
Vielen Dank und LG
Erst mal vielen Dank an alle die sich meinem Problem widmen.
Ich möchte zwei Strukturen auf deren Aufbau miteinander vergleichen.
Fall 1 Beispiel:
[FONT="]TYPE tstruct1 :[/FONT]
[FONT="]STRUCT[/FONT]
[FONT="] test1 : BOOL;[/FONT]
[FONT="] test2 : REAL;[/FONT]
[FONT="] test3 : BOOL;[/FONT]
[FONT="]END_STRUCT[/FONT]
[FONT="]END_TYPE[/FONT]
[FONT="] [/FONT]
[FONT="]TYPE tstruct2 :[/FONT]
[FONT="]STRUCT[/FONT]
[FONT="] test1 : BOOL;[/FONT]
[FONT="] test2 : REAL;[/FONT]
[FONT="] test3 : BOOL;[/FONT]
[FONT="]END_STRUCT[/FONT]
[FONT="]END_TYPE[/FONT]
In diesem Fall sind beide Strukturen gleich.
Fall2 Beispiel:
[FONT="]TYPE tstruct2 :[/FONT]
[FONT="]STRUCT[/FONT]
[FONT="] test1 : INT;[/FONT]
[FONT="] test2 : REAL;[/FONT]
[FONT="] test3 : BOOL;[/FONT]
[FONT="]END_STRUCT[/FONT]
[FONT="]END_TYPE[/FONT]
In diesem Fall sind die Strukturen unterschiedlich und es soll eine Fehlermeldung ausgegeben werden.
Mein erster Ansatz schaut folgendermaßen aus: Ich speichere die Größe der verwendeten Datentypen des Strukts in einem Array und vergleich diese miteinander:
[FONT="]VAR[/FONT]
[FONT="]p : POINTER TO INT;[/FONT]
[FONT="]counter: INT;[/FONT]
[FONT="]array: ARRAY [0..10] OF INT;[/FONT]
[FONT="]i: INT;[/FONT]
[FONT="]END_VAR[/FONT]
[FONT="]
[/FONT]
[FONT="] [/FONT]
[FONT="] WHILE (counter<=SIZEOF(struct_name)) DO[/FONT]
[FONT="] counter:=counter+SIZEOF(p^);[/FONT]
[FONT="] array:=SIZEOF(p^);[/FONT]
[FONT="] p:=p+SIZEOF(p^);[/FONT]
[FONT="] [/FONT][FONT="]i:=i+1;[/FONT]
[FONT="] END_WHILE[/FONT]
Nur leider funktioniert dieser Ansatz nicht, da [FONT="]SIZEOF(p^)[/FONT]immer =2 ist, egal auf welchen Datentyp er zeigt.
Es würde mich freuen wenn jemand den Fehler in meiner Lösung sieht od. wenn er einen anderen Ansatz kennt wie man das Problem besser lösen könnte.
Vielen Dank und LG