stati c не встроенные функции, заставляющие clang выдавать предупреждения Wunneeded-внутренняя декларация - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть заголовочный файл, содержащий несколько функций stati c, которые обертывают вещи.

namespace jhelper {
static void  __attribute__((noinline)) writerKey(rapidjson_writer * writer, const char * key)
{ writer->Key(key); }
}

Почему? Потому что writer->Key() вызывает генерацию загрузки asm. writerKey используется в шаблонных функциях, и если writer->Key() (и аналогичные функции) не обернуты, размер моего исполняемого файла увеличивается на несколько мегабайт.

g cc хорошо справляется с этим, но Clang любит Спам следующее предупреждение:

jsonVisitor.hpp:368:41: warning: 'static' function 'writerKey' declared in header file should be declared 'static inline' [-Wunneeded-internal-declaration]

Я очень явно не хочу этого встроенного. Меня не беспокоит дублирование копий функций stati c, существующих в отдельных блоках компиляции, поскольку я использую объединенную сборку для выпусков. Как мне подавить это предупреждение? Ура!

1 Ответ

1 голос
/ 01 апреля 2020

inline теперь не имеет отношения к встраиванию (и было в основном просто подсказкой).

Поскольку вы добавляете атрибут, чтобы избежать встраивания, у вас не должно быть встраивания.

вы можете сделать

static inline void __attribute__((noinline))
writerKey(rapidjson_writer* writer, const char* key)
{
    writer->Key(key);
}
...