Я разработал кроссплатформенную библиотеку, которая честно использует типа каламбурная в сокетных коммуникациях. Эта библиотека уже используется в ряде проектов, о некоторых из которых я могу не знать.
Неправильное использование этой библиотеки может привести к опасно неопределенному поведению. Я хотел бы в меру своих возможностей убедиться, что эта библиотека используется должным образом.
Помимо документации, конечно, под G ++ лучший способ, которым я знаю, это использовать -fstrict_aliasing
а также -Wstrict-aliasing
опции.
Есть ли способ в GCC применить эти параметры на уровне исходного файла?
Другими словами, я хотел бы написать что-то вроде следующего:
#ifndef MY_FANCY_LIB_H
#define MY_FANCY_LIB_H
#pragma (something that pushes the current compiler options)
#pragma (something to set -fstrict_aliasing and -Wstrict-aliasing)
// ... my stuff ...
#pragma (something to pop the compiler options)
#endif
Есть ли способ?
Вы можете попробовать диагностические прагмы и изменить уровень ошибки для ваших предупреждений. Подробнее здесь:
http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html
Если ваша библиотека — библиотека только для заголовков, я думаю, что единственный способ справиться с этим — это исправить строгие нарушения псевдонимов. Если нарушения происходят между типами, которые вы определяете, вы можете использовать обычные приемы с участием союзов, или may_alias
атрибут типа. Если ваша библиотека использует предопределенный sockaddr
типа, это может быть сложно.