inline string search_prod(string p) //returns a concatenated string of variables which can produce string p
{
int j,k;
string r="";
for(j,0,np)
{
k=1;
while(gram[j][k] != "")
{
if(gram[j][k] == p)
{
r=concat(r,gram[j][0]);
}
k++;
}
}
return r;
}
我以前从未见过这个循环。
好的。多亏了@AshishJohn这个问题现在可以解决。
在提供的链接中,您可以在开头看到一个定义,它更改了 for 循环的语法:
#define for(i,a,b) for(i=a;i<b; i++)
因此,预处理器将for(j,0,np)
转换为:
for (j=0; j<np; j++)
这是一个正常的 for 循环。np
也在文件中声明,只不过是一个全局整数变量。
但是,正如@molbdnilo正确指出的那样,标准(N4296(禁止声明覆盖现有关键字的宏:
17.6.4.3.1 宏名称
包含标准库标题的翻译单元不得 #define 或 #undef 任何标准库标题中声明的名称。
翻译单元不得 #define 或 #undef 与关键字、表 2 中列出的标识符或 7.6 中描述的属性标记词相同的名称
因此,它的行为可能会也可能不会像我描述的那样。