我有一个跨平台应用程序,在我的一些函数中,并没有使用传递给函数的所有值.因此我收到GCC的警告,告诉我有未使用的变量.
编码警告的最佳编码方式是什么?
围绕这个功能的#ifdef?
#ifdef _MSC_VER
void ProcessOps::sendToExternalApp(QString sAppName, QString sImagePath, qreal qrLeft, qreal qrTop, qreal qrWidth, qreal qrHeight)
#else
void ProcessOps::sendToExternalApp(QString sAppName, QString sImagePath, qreal /*qrLeft*/, qreal /*qrTop*/, qreal /*qrWidth*/, qreal /*qrHeight*/)
#endif
{
Run Code Online (Sandbox Code Playgroud)
这太丑了,但似乎是编译器喜欢的方式.
或者我在函数末尾为变量赋值为零?(我讨厌它,因为它改变了程序流程中的某些东西以使编译器警告静音).
有正确的方法吗?
我正在使用arm-linux-androideabi-g++编译器.当我尝试编译一个简单的"你好,世界!" 程序编译好.当我通过在该代码中添加一个简单的异常处理来测试它时它也可以工作(添加之后-fexceptions..我猜它默认是禁用的).
这适用于Android设备,我只想使用CMake,而不是ndk-build.
例如 - first.cpp
#include <iostream>
using namespace std;
int main()
{
try
{
}
catch (...)
{
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
./arm-linux-androideadi-g++ -o first-test first.cpp -fexceptions
它没有问题......
问题 ...我试图用CMake文件编译文件.
我想添加-fexceptions标志.我试过了
set (CMAKE_EXE_LINKER_FLAGS -fexceptions ) or set (CMAKE_EXE_LINKER_FLAGS "fexceptions" )
Run Code Online (Sandbox Code Playgroud)
和
set ( CMAKE_C_FLAGS "fexceptions")
Run Code Online (Sandbox Code Playgroud)
它仍然显示错误.
我们有一套跨平台的CMake构建脚本,我们支持使用Visual C++和GCC构建.
我们正在尝试Clang,但我无法弄清楚如何使用我们的CMake脚本测试编译器是否为Clang.
我应该测试什么来查看编译器是否是Clang?我们目前正在分别使用MSVC和CMAKE_COMPILER_IS_GNU<LANG>测试Visual C++和GCC.
在gcc/g ++ 4.9下我可以写:
int x __attribute__((unused)) = f();
Run Code Online (Sandbox Code Playgroud)
表示x是故意未使用的.
是否有可能以[[]]某种方式使用C++ 11 属性表示法?
我试过了:
int x [[unused]] = f();
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
(是的,我知道它是一个实现定义的属性.)
我正在尝试unused parameter使用新的 c++17 属性忽略警告[[maybe_unused]],如下所示。
int main([[maybe_unused]] int argc, char** argv)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
但我仍然收到warning: unused parameter ‘argc’ [-Wunused-parameter]以下额外警告。
warning: ‘maybe_unused’ attribute directive ignored [-Wattributes]
Run Code Online (Sandbox Code Playgroud)
我正在g++ (GCC) 7.2.0与cmake-3.11.3. 我的编译器标志如下。
-std=c++17 -Wall -pedantic -Wextra -Weffc++
Run Code Online (Sandbox Code Playgroud)
我记得以前成功使用过这个属性,但我不知道为什么现在不起作用。有人可以展示我在这里做错了什么吗?