小编Jet*_*ype的帖子

Clang的-Wall和-Wextra中包含哪些警告?

我发现Clang的文档很差.我找不到很多可用的Clang警告标志列表.我特别感兴趣的是C/C++警告,但这是一个普遍的问题.

GCC列出并描述了警告,并列出了-Wall和-Wextra中包含的内容:https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options

Clang的-Wall和-Wextra包含哪些警告标志?

我可以为每个版本搜索Clang发行说明,以查看每次引入的新警告标记(例如http://llvm.org/releases/3.4/tools/clang/docs/ReleaseNotes.html),但是更容易列表和/或描述Clang的警告?这将非常有用.我需要知道-Wall包含哪些内容,哪些不包含,所以我可以考虑启用那些不包含的内容.

(我知道 - 对于Clang来说存在一切 - 我可能不得不求助于使用它而只是明确禁用我不喜欢的那些吗?更多文档会使这更理想.)

c c++ clang compiler-warnings

21
推荐指数
2
解决办法
1万
查看次数

如何让Clang Static Analyzer从命令行输出?

我在Ubuntu 12.10上运行Clang 3.4(来自http://llvm.org/apt/).我在一些代码上运行了分析器(clang --analyze),它发现了一些问题:

Blah.C:429:9: warning: Declared variable-length array (VLA) has zero size
        unsigned char separatedData[groupDataLength];
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

但具体问题并不重要.我想知道它是如何得出这个结论的步骤(代码很复杂,我不能在15分钟内看到它).

我看到Clang网站的截图,显示了在网络浏览器中查看的工作步骤:

截图

这可能是从Xcode获得的.

问题是:如何让Clang从命令行输出这些工作步骤?如果愿意,甚至可以将结果输出到浏览器?这将使分析仪显着更有用,并使修复更快.

(我注意到GCC的文档非常优秀,但Clang/LLVM的文档很差.我已经尝试过"clang --analyze -Xanalyzer'-v'"作为黑暗中的刺,告诉分析仪更详细 - -Xanalyzer开关来自手册页.)

c++ linux command-line clang clang-static-analyzer

15
推荐指数
2
解决办法
2万
查看次数

处理具有多种构建类型的介子构建选项

阅读了 Meson 站点页面(通常是高质量的)后,我仍然不确定处理不同构建类型的不同选项的预期最佳实践。

因此,要指定调试版本:

meson [srcdir] --buildtype=debug
Run Code Online (Sandbox Code Playgroud)

或者指定发布版本:

meson [srcdir] --buildtype=release
Run Code Online (Sandbox Code Playgroud)

但是,如果我只想b_sanitize=address为调试版本和b_ndebug=true发布版本添加(或其他任意复杂的参数集),我会这样做:

meson [srcdir] --buildtype=debug -Db_sanitize=address ...
meson [srcdir] --buildtype=release -Db_ndebug=true ...
Run Code Online (Sandbox Code Playgroud)

然而,在命令行上添加一堆自定义参数更麻烦,对我来说,把它放在 meson.build 文件中似乎更简洁。所以我知道我可以这样设置一些内置选项:

project('myproject', ['cpp'],
        default_options : ['cpp_std=c++14',
                           'b_ndebug=true'])
Run Code Online (Sandbox Code Playgroud)

但它们是无条件设置的。

所以一个条件看起来像这样:

if get_option('buildtype').startswith('release')
    add_project_arguments('-DNDEBUG', language : ['cpp'])
endif
Run Code Online (Sandbox Code Playgroud)

这是一种方法,但是,似乎b_ndebug=true更喜欢这种方法add_project_arguments('-DNDEBUG'),因为它是可移植的。

如何在 Meson 脚本中有条件地设置可移植样式的构建选项?

另外,b_sanitize=address设置没有任何测试编译器是否支持它。我希望它首先检查它是否受支持(例如,因为库可能丢失):

if meson.get_compiler('cpp').has_link_argument('-fsanitize=address')
    add_project_arguments('-fsanitize=address', language : ['cpp'])
    add_project_link_arguments('-fsanitize=address', language : ['cpp'])
endif
Run Code Online (Sandbox Code Playgroud)

是否可以检查内置的便携式构建选项(例如b_sanitize)是否受支持?

c++ build meson-build

7
推荐指数
1
解决办法
4238
查看次数

使用Linux套接字检测TCP重置

当TCP链路的一端断开连接时,它会向另一端发送重置(RST)消息.我希望能够在应用程序层中收到此信息.

在我的代码中,我使用一个select()调用来接收来自潜在多个源的输入,包括TCP连接.我已经看到,当select()显示有数据准备好在连接上读取,然后一个read()调用返回0字节读取,这发生在通过TCP发送RST之后.(我理解的recv()作品类似于read().)

是否read()返回0字节(后select()一个TCP连接上)只有当连接被重置?在任何其他情况下它是否会返回0字节?

我记得前一段时间在连接的另一端使用了一个特定的以太网设备,而这个Linux端在接收到0之后接收0字节select(),但不是用于连接重置,而是在某些数据流中途.我在Wireshark中确认收到的数据包有0个数据字节.这是一个错误,或者像上面的问题一样,这种行为是否有效?我不记得它是哪个设备,因为它是几年前,但它使用的是Windows驱动程序.

c sockets linux tcp

5
推荐指数
1
解决办法
3399
查看次数