问题标签 [gcc9]
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.
c - 如何避免在我的 GTK3 应用程序中使用全局指针变量
我正在GTK3
使用 On Linux(现在的 Linux mint 19)创建一个 CHAT 应用程序,C
但我无法弄清楚如何在我设计整个程序的方式中避免使用全局(标签)指针。
有一个窗口,它有一个按钮、一个条目和一个标签。当用户键入内容并按 Enter 或按下按钮时,应在标签部分打印消息。
一切都很好,除了我使用全局指针来更新我想避免它的标签,并在 Signal 函数中使用它。
这是一个编译良好并且可以测试的工作示例:
c++ - 编译器错误:在此上下文中是私有的,仅在带有 c++17 的 gcc9 上
我使用 travis 测试我的代码。最近有人将 gcc9 添加到测试代码的编译器集中。虽然使用 gcc8(使用 c++14 和 c++17)和使用 c++14 的 gcc-9.1.0 都可以正常编译,但使用 c++17 的 gcc-9.1.0 会失败,并出现以下错误:
引发此错误的代码如下:
我使用下面的代码让travis CI使用对应的编译器
类 Statement 有一个私有复制构造函数和赋值运算符,但我想知道为什么这会在这里引起任何问题,因为我没有复制 Statement“查询”。尤其是为什么这个问题只发生在带有 c++17 的 gcc-9.1.0 上(在我的本地机器上,我使用 gcc-9.1.1 并且编译时没有任何错误)。
c++ - c++ - 在向量中使用 std::filesystem::path 时双重释放
我正在使用DearImgui开发一个简单的文件浏览器。为此,我将 std::filesystem 与 g++-9 一起使用,目前正在 Kubuntu 19.04 上进行测试。在大多数情况下,该程序按预期工作。一个按钮用于下降到父目录,并且可以通过双击打开子目录。大多数时候,我可以毫无问题地浏览整个文件系统,但是某些命令组合会导致程序中止。确切的错误消息各不相同,但总是与双重释放错误有关。
在将 std::filesystem 添加到我的应用程序之前,我使用的是 g++-8 (Ubuntu 8.3.0-6ubuntu1)。但是,在调用与文件系统相关的内容后,该程序继续出现段错误。这似乎是一个已知问题,应使用 8.3.0-7 (source)修复。与此同时,我决定使用 g++-9 (Ubuntu 9.1.0-2ubuntu2~19.04)。我不确定这是否是我的问题的原因。
这是导致中止的代码:
当使用 Valgrind 运行程序时,它会在更新路径向量和未初始化条件时报告泄漏。尝试将所选路径复制到当前路径时,主要错误似乎是无效读取。
一个可重现的示例需要 SDL2 和 imgui。如果有人感兴趣,我可以发一个。
有趣的是,当我在 gdb 中运行程序并触发中止时,我无法再使用鼠标单击任何内容(甚至是不相关的应用程序,例如 firefox)。我仍然可以使用键盘并通过命令行杀死 gdb。在这个项目中以前没有发生过类似的事情,我无法在程序的无关部分中重现它。这可能是由 Imgui 引起的,但我对此表示怀疑。
c++ - 如何使用 GCC 9 将 `std::filesystem::file_time_type` 转换为字符串
我正在尝试将文件的修改时间格式化为字符串(UTC)。以下代码使用 GCC 8 编译,但不是 GCC 9。
我尝试了decltype(file_time)::clock
and std::chrono::file_clock
,同时使用了 C++17 和 C++20,但它们都不起作用。
https://en.cppreference.com/w/cpp/filesystem/file_time_type上的示例提到它不适用于 GCC 9,因为 C++20 将允许可移植输出,但我不知道如何获取它在职的。如果我不使用 C++20,它不应该与 GCC 9 一起使用吗?
如果可能的话,我更喜欢使用 GCC 9 的 C++17 解决方案。
c - 获得左移负数的警告
我正在尝试为左移负数时未定义的行为生成警告。根据这个答案,C中负数的左移是未定义的。
E1 << E2 的结果是 E1 左移 E2 位位置;空出的位用零填充。如果 E1 具有无符号类型,则结果的值为 E1×2E2,比结果类型中可表示的最大值多模一减少。如果 E1 有带符号类型和非负值,并且 E1×2E2 在结果类型中是可表示的,那么这就是结果值;否则,行为未定义。
我试图了解为什么我没有收到此代码的警告:
x << 3
gcc -Wall(版本 9.1.0)
另外,我也没有收到关于左移负数的警告
z << x
c++ - __FLT_MAX__ 和 __DBL_MAX__ 为 0?
在 GCC 9.1 中,当使用浮点类型调用 std::numeric_limits 的函数时,它们在大多数情况下返回 0。
这发生在我正在处理的项目中,MSVC、GCC 8.3 或 Clang 8.0 没有问题。<double>::epsilon()
有时具有正确的值,但是当从其他文件调用时,它也可能评估为 0。
(<int>::max()
此处留作参考)
产生一个独立的文件(正确的值):
项目结果:
独立编译专用文件时,这些值是正确的:问题不是来自 GCC(正如我所料),但很可能来自项目的配置。
编辑:独立编译项目文件(目前出现此问题)也可以提供正确的结果。随着gcc -dM -E
,__DBL_MAX__
被定义为double(1.79769313486231570814527423731704357e+308L)
。
__DBL_MAX__
值被定义,被 ifdef 包围的代码被执行:
GDB 给出了相同的精确值,所以输出部分没有问题。输出XXX_YYY
或__XXX_YYY__
给出相同的结果,因为 numeric_limits 的函数无论如何都会调用它们。
100%明确:std::numeric_limits<double>::max() == 0
返回true,所以输出部分没有问题。它只是留在这里作为参考。
GCC 产生这种行为的原因可能是什么?反正不是__XXX_YYY__
内置值吗?他们怎么可能持有0?
filesystems - 使用 directory_iterator 时文件名 c_str() 损坏
directory_iterator
在使用之前存储文件名称的目录中的所有文件时,c_str()
会导致无效读取(和垃圾输出)。
这对我来说似乎很奇怪。
代码示例:
在职的:
valgrind 没有报告错误。
损坏的输出:
valgrind 报告 159 次无效读取(大小为 1)——确切数字取决于目录中有多少文件。
这两个片段都已使用 gcc 9.1 使用以下命令编译:
g++-9.1 test.cpp -std=c++17
c++ - ': 错误: '<insert function here>' is not a member of 'std' ' 移动源文件后
在将源文件从我的项目移动到子目录之后,gcc 吐出一个奇怪的错误(之前它确实编译得很好)
我确实设法通过在所述头文件中包含 < string > 来“解决”该问题,但是出现了一个新的,甚至更奇怪的错误。
在这一点上,我什至尝试在其他任何地方的任何其他包含之前包含 < algorithm > ,但这根本没有帮助。相反,它抛出了这个更奇怪的错误......
现在,有没有人知道为什么会发生这种情况/我能做些什么来解决这个问题?
此外,这是错误输出中提到的代码。
主文件
主文件
调试/调试.h
最后是 Makefile.am
c++ - 无法从 basic_stringstream 读取 char8_t
我只是stringstream
在 UTF-8 中尝试:
编译使用:
屏幕上的结果是:
阅读时似乎出了点问题c
,但我不知道如何纠正。请帮我!
c++ - -Wclass-memaccess 带有 boost::endian 和 gcc 的警告
我得到了一个-Wclass-memaccess
gcc >= 8 ,我想知道我是否可以安全地忽略警告。
测试用例:
背景:这种类型的代码用于解码二进制网络流量,memcpy 用于安全,具有严格的别名规则。
在更大的代码库上更广泛地使用该模式之前,我想确保它没有缺陷。
我的印象是复制到 boost::endian 缓冲区是安全的。奇怪的是,当缓冲区是指向的指针时没有警告char
,但只有当缓冲区是指向的指针时std::byte
完整的警告信息是: