这个循环是什么意思:for(j,0,np)


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 宏名称

  1. 包含标准库标题的翻译单元不得 #define 或 #undef 任何标准库标题中声明的名称。

  2. 翻译单元不得 #define 或 #undef 与关键字、表 2 中列出的标识符或 7.6 中描述的属性标记词相同的名称

因此,它的行为可能会也可能不会像我描述的那样。

最新更新