Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
1

[gcc] отказался подавлять предупреждение -Wunused-function

03.04.2017, 12:42. Показов 2269. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
добрый день.

есть подозрение на баг в компиляторах gcc.
(воспроизводил на разных версиях)

хотя допускаю, что возможно я сам делаю что-то не так.

сабж в коде:

http://rextester.com/ZXJUY72580


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <string>
#include <vector>
 
//-std=c++14 fopenmp -O2 -g3 -pedantic -Wall -Weffc++ -Wextra 
//-Woverloaded-virtual -Wctor-dtor-privacy -Wnon-virtual-dtor 
//-Wold-style-cast -Wconversion -Wsign-conversion -Winit-self 
//-Wunreachable-code
 
 
// --- необходимо подавить предупреждение компилятора
// о наличии в коде неиспользуемой функции.
// явным образом указываю волшебный ключик
#if defined(__GNUC__) || defined(__MINGW32__) || defined(__MINGW__)
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wunused-function"
#endif
 
 
namespace //<--- собственность единицы трансляции
{
 
    // однако, почему то предупреждение 
    // как было, так и осталось
    // WTF??????
    
    // warning: ‘int {anonymous}::foo(int)’ defined but not used [-Wunused-function]
    // int foo(int v)   //<--- internal linkage (внутренеее связывание)
    //     ^
    
    int foo(int v)   //<--- internal linkage (внутренеее связывание)
    {                // все равно, как если бы функция была объявлена
        return v*2;  // со словом static
    }
 
    // все, что объвляется внутри безымянного спейса
    // является собственностью единицы трансляции
    // другие единицы трансляций уже никак не смогут
    // получить доступ к содержимому такого спейса
    // таким образом, функции объявленные внутри такого спейса
    // имеют internal linkage
    
    // --- поскольку у функции связывание внутренее,
    // то компилятор в состоянии определить факт того,
    // что функция была объявлена, 
    // но нигде не использовалась
    
    // мне же нужно подавить данное предупреждение
    // я понимаю, что можно заюзать волшебный атрибут:
    // __attribute__((unused)) int foo(int v){ return v*2; }
    // или симулировать вызов функции
 
    // но меня сейчас интересует, 
    // почему ключик "-Wunused-function" не сработал?
    // это я делаю что-то не так?
    // или какой то баг в компиляторе?
    
}//namespace 
 
#if defined(__GNUC__) || defined(__MINGW32__) || defined(__MINGW__)
    #pragma GCC diagnostic pop
#endif
 
 
int main() 
{
    std::cout << "hello, world" << std::endl;
    
}
Добавлено через 55 минут
ещё любопытно:
почему ключевое слово inline
подавляет данное предупреждение?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2017, 12:42
Ответы с готовыми решениями:

gcc не компилирует: too many arguments to function
Building file: ../main.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -Wall -c -fmessage-length=0...

[xvalue][msvs/gcc][bug] member function with ref-qualifier
добрый вечер. следующий код работает как и ожидается. и прекрасно компиляется gcc: ...

Странное предупреждение GCC
В функции есть строчки и компилятор ругается на последнуюю: char *p = NULL; ...

Некорректное ли предупреждение gcc о явно запрещенном конструкторе?
Здравствуйте! У меня есть класс Uncopyable, который явно запрещает копирование. От него наследую...

5
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
03.04.2017, 16:15 2
hoggy, это не баг, это фича как пишут на stackoverflow. юзайте __attribute__((unused)).
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.04.2017, 16:44  [ТС] 3
Цитата Сообщение от avgoor Посмотреть сообщение
это не баг, это фича
чот я не осилил понять,
в чем именно заключается "фича".

если я правильно понял,
то когда компилятор видет:
#pragma GCC diagnostic pop
то он отменяет предыдущую прагму.
и как только это происходит,
опять получаем ситуацию с неиспользованной функцией,
но теперь никакие прагмы компилятор не сдерживают.

ну ок, понятно.
только при чем здесь "фича"?
такая прагма вообще не срабатывает
работает как костыль...
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
03.04.2017, 17:10 4
Цитата Сообщение от hoggy Посмотреть сообщение
в чем именно заключается "фича".
Задокументированный баг - это фича. В доках английским по белому написано: at the moment only warnings (normally controlled by ‘-W…’) can be controlled, and not all of them.
1
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.04.2017, 17:14  [ТС] 5
Цитата Сообщение от avgoor Посмотреть сообщение
Задокументированный баг - это фича
ясн
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
03.04.2017, 17:20 6
hoggy, В С++17, кстати, для этого аттрибут запилили [[maybe_unused]].
0
03.04.2017, 17:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2017, 17:20
Помогаю со студенческими работами здесь

GCC Сборка 32 разрядной версии GCC 64 разрядным GCC
Доброго времени суток. Возникла необходимость под 32х разрядный Linux, собрать 32 разрядный GCC. Но...

Как понимать предупреждение комилятора gcc "ISO C++ says that these are ambiguous."
предупреждение: ISO C++ says that these are ambiguous, even though the worst conversion for the...

Предупреждение "missing initializer" для структур в gcc
Допустим имеется следующий код: #include &lt;stdio.h&gt; struct some { int a; int...

Хочется подобрать ИБП до 5 тысяч, чтобы подавлять скачки в сети
Доброго времени суток имеется данныйhttps://www.cyberforum.ru/attachments/594576d1446332825 конфиг...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru