问题标签 [gcc8]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5094 浏览

c - gcc-8 Wstringop-截断

我正在尝试修复 gcc-8 抱怨 Wstringop-truncation 的一些 C 代码(代码在此处

在我无法控制的服务器上编译该代码时,既不能添加 pragma 语句也不能禁用 Wstringop-truncation 诊断,我收到的警告是:

我想重写 strncpy 语句以删除这些警告。我是对的,我需要在以下几行中替换

cqdb.c 中的相关代码如下。它基本上检查文件是否为“CQDB”类型。请注意,虽然我真的很想访问,但我无法访问这台机器,所以我无法测试 C 代码的修复是否有效。

0 投票
0 回答
1328 浏览

r - R not recognizing my alternative GCC compiler after config updates?

I followed these instructions to get R to use an alternative GCC compiler I have installed on my MacOS.

Building R Packages using Alternate GCC

As basic internet research will tell you (as it told me), the default compiler on the MacOS is clang / clang++, which doesn't work for my specific needs. I installed gcc-8.1 and dependencies in order to enable OpenMP on my machine. OpenMP works when I run gcc-8.1 with a standalone tmp.c file with pragma omp commands in it.

However, when I go back to R to try to run the same code using Rcpp R package, I run into some problems.

The below is what is in my Makevars file located at ~/.R/Makevars on my machine.

This now correctly activates my alternative complier in lieu of clang++. I can install my package with OpenMP functionality by using a Terminal and using the R commands below.

However, I cannot install the package using devtools and roxygen2, which I would prefer. Specifically, the devtools function has_devel() fails.

Here is the code I use when trying to install updates using devtools / roxygen2.

I suspect the pop up window I get from RStudio is directly related to has_devel() function failing to be TRUE. If I revert back to using the default compiler, clang++ (by deleting my Makevars at ~/.R/Makevars), has_devel() returns TRUE and RStudio doesn't ask if I want to install developer command line tools. How can I get around this hiccup with installing a package I am developing using devtools instead of installing from source each time?

Proof of Installed Developer Command Line Tools

R build tools error message

0 投票
1 回答
7767 浏览

c++ - 在 Windows 10 上使用 nuwen MinGW 的 C++17 文件系统

我想在 C++17 中试用新的文件系统库,因此尝试从 cppreference.com 复制 std::filesystem::current_path 示例并使用来自 nuwen.net 的 MinGW 发行版的最新版本 (16.0) 对其进行编译我的 Windows 10 x64 机器。这包括 gcc v8.1,它应该根据cppreference.com 编译器支持页面支持文件系统库。

这是我要编译的代码:

我正在使用的编译器命令:

这是我在尝试编译时遇到的错误:

请注意,我必须剪掉错误消息的结尾以减少此问题的字符数。我已将整个错误消息放在这里:https ://pastebin.com/pnfMnMs7

编辑:根据 Galik 的评论,我尝试将编译器命令更改为

但是我似乎得到与以前完全相同的错误

0 投票
2 回答
516 浏览

c - 为什么 Valgrind memcheck 不能捕获这个 UB?

就像标题说的我真的需要帮助理解,为什么这个代码在我的系统(linux mint 19, GCC-8.0.1, valgrind-3.13.0, c17)上被视为无效代码:

Valgrind 在这里报告问题:

这一个作为有效代码:

Valgrind 输出:

使用O0O1O2GCCO3标志编译:

-Wpedantic -std=c17 -Wall -Wextra -Werror -Wstrict-prototypes -Wmissing-prototypes -Wmisleading-indentation -Wduplicated-cond -Wold-style-definition -Wconversion -Wshadow -Winit-self -Wfloat-equal -Wwrite-strings -O0 -g

0 投票
3 回答
641 浏览

c++ - Google Sparsehash 在不可复制的类型上使用 realloc()

考虑这个简单的程序:

使用 GCC 8.2 和-Wclass-memaccess(或-Wall)编译会产生警告:

问题是:

  1. 它是未定义的行为吗?
  2. 您能否建议可以应用于应用程序代码的修复或解决方法(不是通过更改 Sparsehash 或避免使用它)?
  3. (奖励积分)你能构造一个实际上因此而行为不端的程序(使用 std::string 或你自己的非平凡类型)吗?到目前为止,我在使用 std::string 作为键类型的代码中没有看到任何问题,尽管 std::string 必须是非常常用的键类型。

我在这里提出了一个问题:https ://github.com/sparsehash/sparsehash/issues/149

0 投票
1 回答
440 浏览

c - 如何防止 Socket 服务器断开连接

我写了一个关于套接字的代码,当客户端发送消息或客户端执行服务器关闭时,我无法阻止服务器CTRL + C 关闭。

服务器.c:

客户端.c:

0 投票
2 回答
47 浏览

c++11 - 如何在不升级到 8.x 的情况下解决 GCC 中的这个参数扩展错误?

考虑以下代码:

这是有效的 C++14(实际上,如果您编写自己的 C++11 也是有效的std::index_sequence)。但是 - 它不能用 g++ 6.x 和 7.x 编译;只有 g++ 8.x 可以正确编译它(参见GodBolt 上发生的这种情况)。

出于组织原因,我可以要求使用最高 7.2 的 g++ 版本。有没有办法在保持语义的同时改变代码,让 g++ 7.x 编译它?

0 投票
3 回答
8087 浏览

c++ - 使用 gcc 8.2.1 时出现 strncat Wformat-overflow 警告

我正在使用 gcc 8.2.1 并尝试构建此代码:

但它给了我这个警告:

警告:'char* strncat(char*, const char*, size_t)'指定的界限 13 等于源长度 [-Wstringop-overflow=]

搜索后,根据此链接中的讨论,我发现 size_t 等于源长度是一个溢出问题,但我不明白为什么这被认为是一个问题以及为什么这会溢出目标。以及如何在不更改代码的情况下删除此警告?

0 投票
1 回答
717 浏览

c++ - c++ const_cast gcc 8.2.1 -Wignored-qualifiers bug?

以下程序使用 gcc 8.2.1 生成:

警告:在转换结果类型 [-Wignored-qualifiers] int * const ptrCast = const_cast(ptr) 上忽略类型限定符;

编译为:gcc -Wignored-qualifiers test.cc

根据我对 const_cast 的理解,这不应该发出警告。任何人都可以验证这一点吗?

0 投票
2 回答
252 浏览

c - 当我只有一个 4 字节的局部变量时,为什么在这个反汇编中堆栈增长了 16 字节?

我无法理解为什么编译器选择以我编写的代码的方式偏移堆栈空间。

我正在玩弄 Godbolt 的 Compiler Explorer 以研究 C 调用约定,这时我想出了一个简单的代码,它的选择让我感到困惑。

代码可在此链接中找到。我选择了 GCC 8.2 x86-64,但我的目标是 x86 处理器,这很重要。Bellow 是编译器资源管理器报告的 C 代码和生成的程序集的转录。

从现在开始看汇编列,据我了解,第15行负责为局部变量保留堆栈中的空间。问题是我只有一个本地int的,偏移量是 16 个字节而不是 4 个。这感觉像是在浪费空间。

这是否与单词对齐有关?但即使是这样,如果通用寄存器的大小是 4 个字节,那么这种对齐不应该是 4 个字节吗?

我看到的另一件奇怪的事情是关于函数的 local chars 的位置。testing它们似乎在堆栈中每个占用 4 个字节,如第 7-8 行所示,但只有较低的字节被操作。为什么不每个只使用 1 个字节?

这些选择可能是出于好意,我真的很想了解它们的目的(或者是否没有目的)。或者,也许我只是感到困惑,并没有完全明白。