当前位置: 首页 > 知识库问答 >
问题:

GCC错误,当使用“”尖括号通过宏包含头时,path中的“Linux”字符串被替换为“1”

郑声
2023-03-14

我可能在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

结果:两个命令都能正常工作。这里没问题。

第二种情况:存放文件的

文件夹名包含字符串 linux。例如: test-linux

总体结构如下所示:

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个答案

韩博简
2023-03-14

首先,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正则表达式 替换括号,尖括号等就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 我是bash脚本的新手,但我不理解为什么它不起作用 第3行的替代替换错误 问题答案: 该替换在Bash 4.2.8中正常工作(并且根据文档看起来还不错)。 我最好的猜测是您实际上并没有使用Bash-您如何调用脚本?如果您正在执行此操作,则可能会与Dash或类似的程序一起运行(Dash确实在第3行给出了替换错误)。尝试使用Bash()显式运行它。 如果事实证明您实际上是在使用Dash,这