OLD: void f(mystruct *a)
NEW: void f(const mystruct *a)
ABI: Если a
был out -параметром, старые приложения могут быть повреждены.
API: Кажется совместимым.
OLD: void f(const mystruct *a)
NEW: void f(mystruct *a)
ABI: Функция f
может попытаться изменить значение параметра, которое, как предполагается, не изменялось старыми приложениями.
API: Ошибка компилятора.
РЕДАКТИРОВАТЬ (1): Этот пример показывает ошибку компилятора, чем изменение параметра на неконстантный:
библиотека header.h:
struct mystruct {
int f;
};
void f(struct mystruct *a);
приложение:
int main()
{
const struct mystruct x = {1};
f(&x);
return 0;
}
ошибка компилятора (gcc -Werror app.c
):
error: passing argument 1 of ‘f’ discards qualifiers from pointer target type
note: expected ‘struct mystruct *’ but argument is of type ‘const struct mystruct *’
Это действительно предупреждениев C по умолчанию, но ошибка в C ++.Таким образом, вы сломаете приложения на основе C, скомпилированные с опцией -Werror
, и приложения на C ++, скомпилированные с помощью G ++.