我正在C++中为参数化字符串(用于指定终端的某些终端功能)实施解析器。那时,我发现这个% encoding
传来的terminfo的man page:在terminfo参数化字符串中'%1'编码
%l push strlen(pop)
所以,我的问题是,每当我们推什么压入堆栈,它是当这些下列% encodings
遇到:
%p[1-9] push ith parm
%’c’ push char constant c
%{nn} push decimal constant nn
%l push strlen(pop)
%+ %− %* %/ %m (arithmetic): push(pop integer2 op pop integer1)
%& %| %^ (bit operations): push(pop integer2 op pop integer1)
%= %> %< (logical operations): push(pop integer2 op pop integer1)
%A %O (logical operations): and, or
%! %~ (unary operations): push(op pop)
当遇到这些问题并计算出结果并且结果即将推入堆栈时,然后是一个整数(包括0或1的bool结果)或一个字符将被推入堆栈,然后是%l encoding
意味着任何或没有下述的:
弹出从堆栈和
if a character push 1 onto stack
和if an integer push #digits_in_that_integer onto the stack
单个值。弹出从堆栈的字符串(因为
%l
使用strlen
写入manpages)(弹出一个字符串:保持弹出直到堆栈为空),然后推回弹出字符串的长度压入堆栈。
所以,我的问题是什么意思%l push strlen(pop)
,其长度是它在说什么?
奖金问题:在terminfo的参数化字符串的情况下(在上面提到的第二个项目符号点)弹出字符串的方式是正确的吗?
编辑:正如Thomas Dickey,现在我所指的是this man page of terminfo。
感谢您的回答,现在我指的是[此手册页](https://linux.die.net/man/5/terminfo),如果您想详细阐述__ncurses分析功能字符串以确定一个特定的参数是否将被解释为一个字符串(不管它是否与%1或%s匹配),并且每当使用该参数时,它将为字符串_提供一个示例,谢谢:) – tkhurana96
实际上,这个手册页](https://linux.die.net/man/5/terminfo)是一个如何不格式化一个手册页的例子,我在这里详细讨论了[here](http:// invisible-island。净/脚本/ man2html.html)。我添加了一个权威的链接到我的答案。 –