g++ -D选项添加数字1

G++ -D option adds digit 1

本文关键字:数字 添加 选项 g++      更新时间:2023-10-16

我知道标题很奇怪,所以这里是解释:

我有一些代码,我宁愿不修改,但我需要重新定义一些函数。最简单的例子是:

int main()
{
strcpy_s(a,b);
}

但是当我运行这个:

$ g++ -E -P -w -D"strcpy_s(D,S)   strcpy(D,S) buahaha" test.cpp

:

int main()
{
strcpy(a,b) buahaha 1;
}

这个1是什么?忽略buahaha,这只是为了显示PP做了一些事情。

有两种方法可以使用-D选项:

  • -Dname
  • -Dname=value

第一个定义name1,第二个定义namevalue

name允许包含圆括号,这样您就可以在命令行上定义类函数的宏。像-Dfoo bar这样的东西不包含等号,所以它被解释为试图将foo bar定义为1。宏名不能包含空格,所以这可能会导致错误消息,但它不会被检测到,最终会混淆编译器。试试-D"strcpy_s(D,S)=strcpy(D,S) buahaha"吧。

我怀疑发生的是-Dname被翻译成#define name 1, -Dname=value被翻译成#define name value,错误检查只发生在那之后。这将把-D"strcpy_s(D,S) strcpy(D,S) buahaha"转换为#define strcpy_s(D,S) strcpy(D,S) buahaha 1,并解释您得到的结果。

文档显示-D选项在其语法中有一个等号,您没有使用它。

你的命令应该是:

$ g++ -E -P -w -D"strcpy_s(D,S)=strcpy(D,S)" test.cpp