Ostrzeżenie kompilatora (poziom 1) C4312
'operacja' : konwersja z 'typ1' na 'typ2' o większym rozmiarze
To ostrzeżenie wykrywa próbę przypisania wartości 32-bitowej do 64-bitowego typu wskaźnika, na przykład rzutowania 32-bitowego int
lub long
do wskaźnika 64-bitowego.
Może to być niebezpieczna konwersja nawet dla wartości wskaźnika, które mieszczą się w 32 bitach po wystąpieniu rozszerzenia podpisywania. Jeśli ujemna liczba całkowita 32-bitowa jest przypisana do typu wskaźnika 64-bitowego, rozszerzenie znaku powoduje, że wartość wskaźnika odwołuje się do adresu pamięci innego niż wartość liczby całkowitej.
To ostrzeżenie jest wydawane tylko dla obiektów docelowych kompilacji 64-bitowej. Aby uzyskać więcej informacji, zobacz Reguły używania wskaźników.
Poniższy przykład kodu generuje kod C4312 podczas kompilowania dla obiektów docelowych 64-bitowych:
// C4312.cpp
// compile by using: cl /W1 /LD C4312.cpp
void* f(int i) {
return (void*)i; // C4312 for 64-bit targets
}
void* f2(__int64 i) {
return (void*)i; // OK
}
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla