Windows命令行参数解析

时间:2016-02-18 23:46:07

标签: c++ windows cmd

我在C ++中制作数学表达式解析器并遇到了问题。当我使用某些运算符调用程序时(例如math 2^4)Windows会将插入符号解析为特殊字符,并且程序不会读取它。我可以使用反斜杠来逃避它,但我似乎无法逃避正斜杠。

如果我运行math "1(4 / 2)",程序只会读取4。但是,如果我运行math "1(4 \/ 2)",它会读取整个表达式。

我的问题:我可以在Windows或编译器中禁用此解析吗? (我读到解析实际上是由程序处理的)。我正在使用G ++ 4.8.1。如果需要,我可以发布代码。

编辑:添加了更多示例

如果它看到一个不能用于数学的字符,就像反斜杠一样,它会吐出一个错误。测试时我没有遇到这个错误。

致电:math "1(2 + 3 - 4 / 5 * 6 % 7 ^ 8 % 9 | 10 ? 11)"结果:NUMBER_1 OPEN_BRACE NUMBER_2 NUMBER_3 NUMBER_5 NUMBER_9

致电:math "1(2 + 3 - 4 \/ 5 \* 6 \% 7 ^ 8 & 9 \| 10 ? 11)"结果:NUMBER_1 OPEN_BRACE NUMBER_2 NUMBER_3 DIV NUMBER_5 BAND NUMBER_9

1 个答案:

答案 0 :(得分:0)

^cmd.exe命令解释器中的转义字符。

C:\> echo 2^5
25

C:\> echo 2^^5
2^5

C:\> echo "2^5"
"2^5"

C:\> _

与C和C ++转义字符\一样,行末尾的插入符号表示行继续:

C:\> echo 2^
More? ^5
2^5

C:\> _

命令解释程序的行为不是Windows的固有功能。它甚至不是常见的Windows约定。事实上,它在Powershell中并不存在:

C:\> powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\> echo 2^5
2^5
PS C:\> _

正如这样确定的那样,你看到的效果与C ++ 甚至Windows无关,但只是特定命令解释器的特性,即{{1} }。