我可能在GCC中发现了一个bug。我在网上找不到任何与此相关的东西,所以我想知道是否有人以前见过这个。
我使用的“Ubuntu 16.04.0 LTS”是:gcc version 5.4.0 201 60609(Ubuntu 5.4.0-6Ubuntu1~16.04.6)
,但是这个问题也会在更高的gcc版本gcc-6和GCC-7上出现。
在https://github.com/mihaipop11/gcc-linux中,您可以找到一个链接,链接到包含所有源代码的github repo。
如何繁殖:
我们有一个很好的小程序,里面有这些文件:
// main.cpp
#include <iostream>
#include INCLUDE_FILE
int main()
{
std::cout << "Works this time" << std::endl;
}
和文件夹中的头文件,假设命名为include
,这并不重要,这只是为了演示目的。
// include.hpp
//empty header
总体结构如下所示:
<dir>
├── main.cpp
└── include
└── include.hpp
总体结构如下所示:
test-notlinux
├── main.cpp
└── include
└── include.hpp
现在,CD test-notlinux
并尝试编译源代码:
g++ "-D INCLUDE_FILE=\"${PWD}/include/include.hpp\"" main.cpp
g++ "-D INCLUDE_FILE=<${PWD}/include/include.hpp>" main.cpp
结果:两个命令都按预期工作。这里没有问题。
test-linux
├── main.cpp
└── include
└── include.hpp
现在,CD test-linux
并尝试编译源代码:
// first command should work
g++ "-D INCLUDE_FILE=\"${PWD}/include/include.hpp\"" main.cpp
// but this ...
g++ "-D INCLUDE_FILE=<${PWD}/include/include.hpp>" main.cpp
结果:第二个命令显然用1
替换了dir名称中的Linux
字符串
输出:/tmp/test-1/include/include.hpp:没有这样的文件或目录
有人对此有所了解吗?
首先,Linux
是定义到1
的宏。在<>的情况下,宏被展开,而在“”的情况下,令牌是一个字符串。
其次,Linux
仅在使用GNU扩展时才被定义,所以只要使用-std=c++{98,11,14,17,2a}
或-ANSI
编译,就不会被定义(只有__linux__
、_linux
和__gnu_linux__
被定义)。
我可能在GCC中发现了一个bug。我在网上找不到任何与此相关的东西,所以我想知道有没有人以前见过这个。 我正在使用“Ubuntu 16.04.0 LTS”和:,但是这个问题也可以在以后的gcc版本gcc-6和GCC-7上重现。 在https://github.com/mihaipop11/gcc-linux中,您可以找到包含所有源代码的github repo的链接,但我也将在下面解释这一点。 如何
问题内容: 我有一个包含标记的字符串列表。 令牌是: {ARG:token_name}。 我也有标记的哈希图,其中key是标记,value是我要用来替换标记的值。 当我使用“ replaceAll”方法时,出现错误: java.util.regex.PatternSyntaxException:非法重复 我的代码是这样的: 并且valueFromHashMap包含{和}。 我将此哈希图作为参数。
如何删除字符串中任意位置的圆括号?
两行的一个例子是:([a,b,c],d)和([d,e],a)我想把这些行转换成([a,b,c],[d,e])和([d,e],[a,b,c]) dataframe的列名是“src”和“dst”。 我如何处理这个问题?
本文向大家介绍使用JS正则表达式 替换括号,尖括号等,包括了使用JS正则表达式 替换括号,尖括号等的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇使用JS正则表达式 替换括号,尖括号等就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
然后我试着这样称呼它。 不幸的是,修改URL编码路径替换后,我最终请求而不是。是否有任何方法可以禁用路径替换的URL编码或跨多个路径段进行替换?不幸的是,我甚至不知道有多少路径段,它都是由API控制的。