__FILE__, __LINE__ 是ANSI C语言标准,各种C编译器都应当支持。而 __FUNCTION__ 是C99标准,故一些老的编译器就不支持。如gcc支持__FUNCTION__,而vc6就不支持。

重申一遍,这些宏是编译器内置宏,无法定义,也不需要定义,就如c语言关键字一样。

经测试:
1,cygwin 1.7.9-1 gcc-g++ 3.4.4-999测试3者都支持。
2,VS2002(VC7)3者都支持。

测试代码

#include <iostream>

using namespace std;



int main()

{

cout<<__FILE__<<" "<<__LINE__<<" "<<__FUNCTION__<<endl;

return 0;

}