__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; }