Я использую флаги компиляции -Wall, Wextra и Werror. Я получаю поток «объявленных« статических », но никогда не определенных [-Werror = unused-function] »предупреждений (рассматриваемых как ошибки) при компиляции следующего файла. Нет таких предупреждений, когда я меняю порядок директив #include. Пожалуйста, помогите мне понять, почему?
Я знаю, что мог бы удалить лишние предупреждения и ошибки и заставить мою программу скомпилироваться, но это явно не мое намерение, иначе мой код был бы более интересным. Я пытаюсь получить более глубокие знания о C++ и улучшить свои привычки, убирая предупреждения в своем коде.
Я понимаю, что argp на самом деле является библиотекой C, а iostream — библиотекой C++, возможно, это часть проблемы. Я был бы счастлив использовать подходящую библиотеку C++ для выполнения того, что делает argp, но я не могу ее найти. Если есть, буду рад услышать о нем.
#include <argp.h>
#include <iostream>
int main(int argc, char **argv)
{
return 0;
}
Чтобы было ясно, я работаю над нетривиальной программой, и у меня есть определенные причины, по которым я хочу использовать C++ вместо C. Я сократил код, показанный здесь, до минимально возможного кода, чтобы произвести эффект, который я пытаюсь добиться. понимать. Пожалуйста, не предполагайте, что мне не нужен тот или иной из заголовков.
Компилятор: gcc
:~/scratch/argp_example$ gcc --version
gcc (Ubuntu 5.2.1-23ubuntu1~12.04) 5.2.1 20151031 Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
вызов компилятора: g++ -o obj/main.o -c src/main.cpp -Wall -Wextra -Werror -pedantic -MMD --std=c++11 -Iinc
Конкретный отзыв о компиляторе:
In file included from /usr/include/x86_64-linux-gnu/c++/5/bits/gthr.h:148:0,
from /usr/include/c++/5/ext/atomicity.h:35,
from /usr/include/c++/5/bits/ios_base.h:39,
from /usr/include/c++/5/ios:42,
from /usr/include/c++/5/ostream:38,
from /usr/include/c++/5/iostream:39,
from src/main.cpp:2:
/usr/include/x86_64-linux-gnu/c++/5/bits/gthr-default.h:101:1: warning: ‘int __gthrw_pthread_once(pthread_once_t*, void (*)())’ declared ‘static’ but never defined [-Wunused-function] __gthrw(pthread_once) ^
Есть еще много подобных ошибок из gthr.h. Эта конкретная копия/вставка была из запуска без -Werror, но это единственное отличие.
РЕШЕНИЕ: Это был мой выбор решения, но, конечно, вы можете просто изменить порядок включений. Это признанная ошибка, поэтому нет «правильного» ответа, все решения будут обходными. Этот, я думаю, вряд ли вызовет раздражение у меня или у других позже.
#include <argp.h>
#undef __attributes__
#include <iostream>
...
g++
, а не компилятор C, напримерgcc
. Поскольку вы пишете код на C++, удалите тегc
. - person user3629249   schedule 02.05.2016