Я изо всех сил пытаюсь избавиться от предупреждения шины для следующего кода:
void GetPrinterInfo(HANDLE hPrinter){
PRINTER_INFO_4* pPrinterInfo = NULL;
DWORD bytesNeeded;
GetPrinter(hPrinter, 4, NULL, 0, &bytesNeeded);
pPrinterInfo = malloc(bytesNeeded);
if (GetPrinter(hPrinter, 4, (LPVOID)(pPrinterInfo), bytesNeeded, &bytesNeeded)){
printf("Printer name: %S", pPrinterInfo->pPrinterName);
}
free(pPrinterInfo);
}
Предупреждение (в строке "printf"):
ПолеpPrinterInfo-> pPrinterName, использованное до определения
1> Используется значение r, которое не может быть инициализировано значением при некотором выполнении
Предположительно, предполагается, что pPrinter
не имеетзаселены еще.Я попытался пометить определение заголовка SetPrinter
с /*@out@*/
s и т. Д., Но это не помогает.Я пробовал кучу аннотаций внутри файла заголовка, таких как /*@temp@*/
, /*@dependent@*/
, но безрезультатно.
Как мне разумно дать понять splint, что поле pPrinter, как ожидается, будет действительным после вызовадо GetPrinter
?