标签: compiler-flags

我应该用什么标志来强制执行一个好的C++ 11风格?

我正在学习C++,并试图编写好的代码.我目前正在使用lof的编译器标志,例如

-Wextra -Wall -pedantic -Werror -Wfatal-errors -Wcast-qual -Wcast-align -Wconversion -Wdouble-promotion -Wfloat-equal -Wshadow -Wpointer-arith -Weffc++ -ansi -Wstrict-aliasing

我刚刚学会了关键字new,delete不应再在C++ 11中使用了.但是,我使用它时没有任何警告.

是否有一些标志用于确保良好的C++ 11风格?

c++ coding-style compiler-flags c++11

8
推荐指数
1
解决办法
1037
查看次数

在GCC中编译时使用`-Wextra`标志的缺点

我知道应该总是用两者编译-Wall并且-Wextra因为它们启用警告并帮助我们理解我们的错误,如果有的话.

我已经读过-Wextra不建议使用编译器标志,因为它太冗长了很多误报.

读这篇文章我很惊讶.所以我开始谷歌搜索它,但我没有得到任何答案,因为所有搜索结果显示" -Wextra旗帜做什么?".

所以,我的问题是

  • 在哪种情况下,-Wextra旗帜会发出不必要的警告?
  • 是否可以阻止该-Wextra标志启用导致GCC发出这些类型警告的其他标志?

c gcc code-analysis compiler-flags compiler-warnings

8
推荐指数
1
解决办法
2156
查看次数

g ++标志的含义-Wall -W -Werror

这些是什么,他们做了什么?

-Wall -W -Werror
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu中使用终端用这个命令编译程序:

$ g++ -Wall -W -Werror main.cpp -o exec
Run Code Online (Sandbox Code Playgroud)

谁有人向我解释这个?

compiler-flags gcc-warning

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

禁止精度损失的整数转换

如何防止这样的代码编译?

#include <vector>
#include <limits>
#include <iostream>
#include <cstdint>

int main() {
  std::vector<int16_t> v;
  v.emplace_back(std::numeric_limits<uint64_t>::max());
  std::cout << v.back() << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

g ++和clang -std=c++14 -Wall -Wextra -Werror -pedantic -Wold-style-cast -Wconversion -Wsign-conversion甚至都不警告它.该示例还编译时没有警告std::vector<uint16_t>

c++ type-conversion compiler-flags implicit-conversion c++11

8
推荐指数
1
解决办法
371
查看次数

EXTRA_CFLAGS的目的是什么?

它的用途是EXTRA_CFLAGS什么?

我在某些情况下看到它,但我永远不明白为什么人们不会只是附加旗帜CFLAGS而不是EXTRA_CFLAGS.

我首先想到的是make如何定义其隐式规则,但事实并非如此.据我所知,EXTRA_CFLAGS在make隐式规则中没有使用,对吗?

我很感激任何启蒙.

makefile compiler-flags

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

-fPIC 编译标志有什么作用?

-fpic 标志有什么作用?我想安装一个库(OpenSFM),并且声明它需要使用 -fPIC 编译标志构建和安装 Ceres Solver。

问题是我已经安装了没有 -fPIC 标志的 Ceres Solver,其他库已经依赖它。我该如何解决这个问题?

shared-libraries compiler-flags

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

xcodebuild 可以删除项目的Build Folder 的内容吗?

回到 Xcode 9,有一个名为“Clean Build Folder...” ( ???K)的构建选项,它删除了构建文件夹中的所有文件,只留下没有内容的文件夹。从那时起,此行为被删除,菜单项的标题更改为“Clean Build Folder”,现在表现得像以前的“Clean”。

xcodebuild有一个名为的构建选项clean,它与 Xcode 的“Clean Build Folder” ( ??K)做同样的事情,它会留下一些东西。

有没有办法通过可编写脚本的命令删除构建文件夹中的所有文件?


到目前为止我尝试过的:

xcodebuild clean -workspace "My Workspace.xcworkspace" -scheme "My Scheme"
Run Code Online (Sandbox Code Playgroud)

正如我所说,这实际上并没有清理所有内容。为此,我将这个 bodge 添加到我的构建脚本中:

export IS_XCODE_CACHE_FOLDER_PRESENT="`ls -la ~/Library/Developer/ | grep -x "Xcode"`"

if [ 0 -ne "$IS_XCODE_CACHE_FOLDER_PRESENT" ]; then
    echo "Xcode cache folder should not be present at build time! Attempting to delete..."
    rm -rf "~/Library/Developer/Xcode"
    RM_RESULT=$?
    if [ 0 -ne "$RM_RESULT" ]; then
        echo …
Run Code Online (Sandbox Code Playgroud)

xcodebuild compiler-flags

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

C++“功能测试宏”的值是什么意思?

为了测试某个功能, cppreference 提到了这些功能测试宏: link

如果编译器中存在该功能,则定义宏。但我不明白为什么,如果定义了,它们会被定义为类似的东西201606,我相信这是C++ 的版本,而不是编译器的版本

例如,我正在使用 GCC 的最新版本来实现-std=c++17该功能__cpp_lib_hardware_interference_size。该宏未定义,我认为这意味着 GCC 没有该功能,尽管尝试使用 c++17(和 c++2a)开关 8.2.1。在这种情况下,记录值的意义是什么:

__cpp_lib_hardware_interference_size 201703

(在 cppreference 链接内)?

c++ gcc compiler-flags dialect

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

当我用程序编译它时 -Wall 标志会做什么?

我正在遵循一个教程,该教程介绍了如何使用 gprof 分析程序,给出的命令如下

gcc -Wall -pg test_gprof.c test_gprof_new.c -o test_gprof

但它没有对这个标志给出任何解释(-Wall)

gcc compilation compiler-flags gprof

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

clang++ 的选项 -fno-strict-enums 有什么作用?

两个月前,我报作为一个clang++错误,那下面套C ++程序z,以4294967295在编译时clang++ -O2 -fno-strict-enums

enum e { e1, e2 } e;

long long x, y, z;

char *p;

void f(void) {
    e = (enum e) 4294967295;
    x = (long long) e;
    y = e > e1;
    z = &p[e] - p;
}
Run Code Online (Sandbox Code Playgroud)

由于程序未定义,我的错误报告因无效而关闭。我的感觉是使用该选项-fno-strict-enums使其定义。

据我所知,Clang 没有名副其实的文档,因为它的目标是在它接受的选项及其含义方面与 GCC 兼容。我读了 GCC 的选项文档-fno-strict-enums说程序应该将值设置z-1

-fstrict-枚举

允许编译器使用以下假设进行优化:枚举类型的值只能是枚举值之一(如 C++ 标准中所定义;基本上,可以用最少位数表示的值来表示所有枚举器)。如果程序使用强制转换将任意整数值转换为枚举类型,则此假设可能无效。

请注意,仅记录了该选项-fstrict-enums,但似乎很清楚-fno-strict-enums禁用-fstrict-enums启用的编译器行为。我无法针对 GCC 的文档提交错误,因为生成设置z为的二进制文件, …

c++ enums compiler-flags clang++

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