Използвам флагове за компилиране -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