Является ли Clang ++ игнорирующим extern & quot; C & quot; для некоторых предупреждений об устаревании?

Если я использую Clang 3.8.1 для компиляции:

extern "C" {
int foo(int x) { register int y = x; return y; }
}

int main() { return foo(123); }

Я получаю предупреждение:

a.cpp:3:18: warning: 'register' storage class specifier is deprecated and incompatible with C++1z [-Wdeprecated-register]
int foo(int x) { register int y = x; return y; }
^~~~~~~~~

… который я действительно не должен был получить, так как внутренняя функция — это C-код. Если я использую GCC 6.3.1, даже с -WallЯ не получаю это предупреждение.

Это ошибка лягушки или я что-то не так делаю?

0

Решение

extern "C" не означает «скомпилировать этот код как C». Это означает «сделать эту функцию (или функции) вызываемой из кода C», что обычно означает изменение искажения имени и, иногда, соглашения о вызовах.

7

Другие решения

Возможно, ошибка не имеет ничего общего с extern "C"? Похоже, он говорит: «регистр несовместим с C», а «регистр несовместим с C ++ 1z». (Я предполагаю, что C ++ 1x означает C ++ 11/14/17.)

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector