編譯器錯誤 C2857
在來源檔案中找不到以 /Ycfilename 命令列選項指定的 '#include' 陳述式
/Yc 選項會指定編譯來源檔案中未包含之 include 檔案的名稱。
備註
當您在 原始程序檔上使用 /Yc檔名 選項來建立先行編譯頭檔 (PCH) 檔案時,該原始程式檔必須包含 檔名 頭檔。 原始程式檔所包含的每個檔案,最多包含指定的 檔名,都會包含在 PCH 檔案中。 在其他使用 /Yu檔名選項編譯的原始程序檔中,使用 PCH 檔案時,檔名的包含必須是檔案中的第一個非批注行。 編譯程式會在包含之前忽略原始程序檔中的任何專案。
此錯誤可能是由 PCH 來源檔案中未編譯的條件式編譯區塊中的 語句所造成 #include "filename"
。
範例
在一般用法中,專案中的一個原始程序檔會指定為 PCH 原始程式檔,而一個頭檔會當做 PCH 頭檔使用。 典型的 PCH 頭檔包含您專案中使用的所有連結庫標頭,但不是仍在開發的本機標頭。 在此範例中,PCH 頭檔名為 my_pch.h。
// my_pch.h
#pragma once
#include <stdio.h>
PCH 來源檔案是使用 /Ycmy_pch.h 選項編譯。 如果編譯程式找不到此 PCH 頭檔包含,則會產生 C2857:
// my_pch.cpp
// Compile by using: cl /EHsc /W4 /Yumy_pch.h /c my_pch.cpp
#if 0
#include "my_pch.h" // C2857; remove conditional directives to fix
#endif
若要使用此 PCH 檔案,必須使用 /Yumy_pch.h 選項編譯原始程序檔。 PCH 標頭檔案必須先包含在使用 PCH 的原始程式檔中:
// C2857.cpp
// Compile my_pch.cpp first, then
// compile by using: cl /EHsc /W4 /Yumy_pch.h my_project.cpp my_pch.obj
// Include the pch header before any other non-comment line
#include "my_pch.h"
int main()
{
puts("Using a precompiled header file.\n");
}