#line 详细解释看MSDN
这里主要是解释一下:
#line 行数 文件名
在混合语言编程环境中,一般都有一个预编译器,把寄宿语言翻译成C这种寄主语言,而翻译过程会导致我们的代码行数发生变化,这时候编译器给我们报告那一行出现问题了之类的情况,就会导致我们不知所云,因为那个行数不是我们在实际代码中看到的行数。在可能出错的地方插入#line语句,将编译器内部存储的函数和文件名用你传给的行数和名称代替,这样该处出错时,编译器将返回你给出的行数和文件名。
你给出的行数和文件名是目前你所在文件中看到的行数,而实际程序经编译器编译时,由于存在宏替换,内联函数,以及上面提到的混合语言编程环境等一些改变程序规模的因素,会引起程序行数较之前增多。
举个例子就清楚了:
上图在可能出错的地方加入了#line 其中使用的行数是tempura.l文件中对应的位置,这样当发生错误时,我们可以根据编译器提示的行数和文件名直接到达出错地点