Wpływ makr na kompatybilność libów

0

Cześć, załóżmy, że mamy taki kod, który buduje się do liba (takie api):

plik header.h:

 
#define STR "Siema"

plik cpp:

#include "header.h"

void Foo()
{
//blabla
}

Przy czym plik header.h nie jest bezpośrednią częścią API, tzn. nie jest dostarczany klientom.
Funkcja Foo gdzieś tam w jakiś sposób wykorzystuje makro STR.

Teraz mamy projekt, który sobie linkuje tego liba i pracuje z nim api. Wszystko działa i jest fajnie.

Jednak po pewnym czasie zmieniamy wartość makra STR na "Pędzę do ciebie światłowodem". Kompilujemy, tworząc nowego liba.
Teraz ten projekt, który pracował z oryginałem, linkuje sobie nowego liba. Czy będą błędy, czy wszystko będzie działać poprawnie?

1

Powinno być ok, chyba że zależy od treści "Siema"

0

W twoim przykładzie makro nie ma żadnego znaczenia bo nie jest nigdzie użyte.

Ale w ogólnym przypadku, pytanie jest dziwne.
Bo pytasz o przypadek, w którym:

  1. jest sobie biblioteka
  2. program jej używa
  3. zmieniasz bibliotekę
  4. ??? program nadal działa czy nie?

Na to pytanie NIE MA jednoznacznej, ogólnej odpowiedzi.

2

jak masz bibliotekę, którą masz utrzymywać to tylko publicznie symbole, które mogą być używane przez kod używający biblioteki.
Podane prze ciebie makro jeśli nie jest wystawione publicznie nie ma wpływu na kompatybilność wsteczną.
Jeśli znalazło by się jednak w pliku nagłówkowym dostarczanym razem z biblioteką i makro ma być używane przez 3rd party code to wtedy muisz dbać o source compatibility, bo zmiany tego makra mają wpływ jedynie na kod jedynie podczas ponownego przebudowywania kodu korzystającego z nowej wersji biblioteki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1