Примечание: добавлен пример ниже и обновлен заголовок после комментария о воспроизводимости.
Мы пытаемся улучшить нашу кодовую базу, предоставляя атрибуты нашим функциям.
для некоторых функций мы добавили атрибут:
__attribute__ ((warn_unused_result))
В некоторые моменты мы намеренно помещаем некоторый код, который должен выдавать предупреждение, поскольку мы не используем результат функции.
например, * +1008 *
shared_ptr<type> functionName() __attribute__ ((warn_unused_result));
functionName(); // this should produce a warning
Однако предупреждения не выдаются. Являются ли эти предупреждения подавленными по умолчанию или существуют другие зависимости, которые могут помочь в работе.
Я нашел некоторую информацию здесь: https://www.linuxquestions.org/questions/programming-9/gcc-warn_unused_result-attribute-917158 через Google, но это не указывает мне, почему он не работает для нестандартных функций.
Как четыре наши установки:
Вот пример, который воспроизводит эту проблему:
#include <iostream>
#include <memory>
std::shared_ptr<std::string> function(int b) __attribute__ ((warn_unused_result));
int other(int b) __attribute__ ((warn_unused_result));
int main()
{
auto lResult = function(3); // not expect warning
std::cout << lResult->c_str() << " is the result" << std::endl;
std::cout << function(4)->c_str() << " is the result too." << std::endl; // not expect warning
function(5); // expect warning but this warning is not given.
auto lOther = other(3); // not expect warning
std::cout << lOther << " is the result" << std::endl;
std::cout << other(4) << " is the result too." << std::endl; // not expect warning
other(5); // expect warning and it is given.
return 0;
}
std::shared_ptr<std::string> function(int b)
{
auto lString = std::make_shared<std::string>("::" + std::to_string(b) + "::");
return lString;
}
int other(int b)
{
return 5 * b;
}
и CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(ShowCase)
add_definitions("-std=c++14")
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Wall -Wextra -Wconversion -Wshadow -Weffc++")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -Wall -Wextra -Wconversion -Wshadow -Weffc++")
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -Wall -Wextra -Wconversion -Wshadow -Weffc++ ")
set(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -Wextra -Wconversion -Wshadow -Weffc++")
add_executable(ShowCase main.cpp)
Любая помощь или указатели будут очень признательны.
С уважением,
Ян Яап