enum API Kompatibilität

10/10/2008 - 14:10 von Markus Raab | Report spam
icheck (ein API checker) meldet mir wenn ich einen Enumerator hinzufüge dass
das API nicht vorwàrts-kompatibel ist[0].

Das glaube ich auch gerne, wenn ich irgendwo eine Zahl von diesem Enum aus
dem erweiterten Bereich zurückgeben würde. So wie ich den Output aber
interpretiere reicht das Hinzufügen alleine aber um nicht mehr API
Kompatibel zu sein?

Hat jemand Erfahrung mit enums die direkt im öffentlichen Interface stehen?
So wie ich das verstehe àndert sich ja nicht der Typ wenn ich etwas bei
einem enum hinzufüge, sondern maximal der Bereich. Das trifft aber in
diesem Fall auch nicht zu, da ja bis 40 sowieso schon definiert war und nur
21 hinzugekommen ist.

Obwohl icheck nicht direkt dazu eine Aussage macht, würde ich meinen dass
das Interface dann nicht mehr rückwàrts-kompatibel sein kann, weil ein
Programm welches den neuen Enumerator verwendet nicht mehr mit der alten
Version kompiliert werden kann.

Nehme ich das richtig an?
Darf ich, obwohl ich kompatibel bleiben will, einen Enumerator in einer
neuen API Version hinzufügen?
Darf der auch ausserhalb des Wertebereiches des alten enums liegen?
(in dem Beispiel KEY_TYPE_NEWA).

mfg Markus

[0] API addition: enumerator KEY_TYPE_INT is new
in declaration at kdbnew.h:48:
typedef enum
{
KEY_TYPE_UNDEFINED = 0,
KEY_TYPE_BINARY = 20,
KEY_TYPE_BINARY01 = 21,
KEY_TYPE_INT = 21,
KEY_TYPE_STRING = 40,
} type_t;
versus declaration at kdb.h:48:
typedef enum
{
KEY_TYPE_UNDEFINED = 0,
KEY_TYPE_BINARY = 20,
KEY_TYPE_BINARY01 = 21,
KEY_TYPE_STRING = 40,
} type_t;

API is not forward-compatible
 

Lesen sie die antworten

#1 Alexander Bartolich
10/10/2008 - 14:18 | Warnen spam
Markus Raab schrieb:
icheck (ein API checker) meldet mir wenn ich einen Enumerator hinzufüge dass
das API nicht vorwàrts-kompatibel ist[0].



http://en.wikipedia.org/wiki/Forward_compatibility
# Forward compatibility (sometimes confused with extensibility) is
# the ability of a system to gracefully accept input intended for
# later versions of itself.

[...]
Obwohl icheck nicht direkt dazu eine Aussage macht, würde ich meinen dass
das Interface dann nicht mehr rückwàrts-kompatibel sein kann, weil ein


^^^^^^^^^^^^^^^^^^^^
Das wàre "backward compatibility".

[...]
[0] API addition: enumerator KEY_TYPE_INT is new
in declaration at kdbnew.h:48:
typedef enum
{
KEY_TYPE_UNDEFINED = 0,
KEY_TYPE_BINARY = 20,
KEY_TYPE_BINARY01 = 21,
KEY_TYPE_INT = 21,



Früher war 21 eindeutig KEY_TYPE_BINARY01, jetzt ist es zweideutig.
Was genau bezweckst du damit?

usingwhitespaceisracism

Ähnliche fragen