while(((long)(1000*ratio*((long)clock()-(long)t0))%100)/1000)<Data_Read_Rate);
上面的行正在生成以下错误:“< token 之前的语法错误”。
为什么会出现这个错误?
我使用 MINGW32 进行开发(GCC 编译器)。
谢谢...
左侧缺少一个括号。这将解析:
while ((((long)(1000*ratio*((long)clock()-(long)t0))%100)/1000)<Data_Read_Rate);
除了解析问题:
此外,考虑到您使用 % 运算符,您可能希望像这样放置额外的括号(我假设ratio不是整数),因为 % 运算符需要整数操作数:
while (((long)(1000*ratio*(((long)clock()-(long)t0))%100)/1000)<Data_Read_Rate);
(但这在语义层面上有意义吗?砍掉它!)
你有太多的右括号。
另外,你的逻辑太长太深了,我懒得去弄清楚代码应该是什么。只是以红色vim
突出显示最后一个,这意味着它不匹配。)
我建议您考虑使用一些中间变量,并通过将其分散到几行而不是一行来简化该语句的逻辑。
括号不匹配。顺便说一句,我实际上会编辑代码并将其分解为多个语句以使其更具可读性。
因为编译器和人类读者一样对你的代码感到困惑?[不寒而栗]
空格和换行符是免费的,并且很好地增加了可读性。
while ( ( (long)( 1000 * ratio * ( (long)clock() - (long)t0 ) ) % 100 ) / 1000 ) < Data_Read_Rate );
您也可以取消 clock() 和 t0 的(长)转换(假设它们都是 int )。在减法之前铸造它们不会改变结果。要使整个计算变长,将其中一个参数变长就足够了——而做到这一点的最短方法是转换文字 1000:
while ( ( ( 1000l * ratio * ( clock() - t0 ) ) % 100 ) / 1000 ) < Data_Read_Rate );
嗯……等等。你取一些东西,模 100(产生 0 到 99 之间的数字),然后除以 1000?你的结果总是0...
哦,你忘了匹配你的括号。;-)
如前所述,您的括号不匹配。
对于这样的表达式,使用一些临时变量来简化语句几乎总是更好。但是,以下提示可能会有所帮助。
您在左侧缺少一个括号。
你有太多的左括号和右括号。如果您使用的是 Visual Studio,它将帮助您使用 Ctrl+'[' 和 Ctrl+']' 按键匹配打开和关闭括号/大括号
另一个建议是通过保持表达式的可读性将其分组并分成多行。还尝试在后续括号之间留出空格,以便对表达式进行逻辑分组。