gcc会预编译头文件成gch文件以节省编译时间,如果改变了头文件源码而不重新编译的话,gcc还会使用老的gch文件。但是当加选项-E只做预编译的时,gcc会使用最新的头文件源码。这样就产生了编译生成的结果与预编译生成的结果不一样的现象。 来源:http://hi.baidu.com/ustc_likai/blog/item/e28aaa1f573c4d69f724e469.html