gpt4 book ai didi

无法摆脱夹板警告 "Field used before definition", "rvalue is used that may not be initialized to a value on some execution"

转载 作者:行者123 更新时间:2023-12-02 01:00:29 25 4
gpt4 key购买 nike

我正在努力摆脱以下代码的夹板警告:

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”行):

Field pPrinterInfo->pPrinterName used before definition

1> An rvalue is used that may not be initialized to a value on some execution

大概它假设 pPrinter 还没有被填充。我尝试用 /*@out@*/s 等标记 SetPrinter 的 header 定义,但它没有帮助。我在头文件中尝试了一堆注释,例如 /*@temp@*//*@dependent@*/ 无济于事。

在调用 GetPrinter 后,我如何明智地让 splint 知道 pPrinter 字段应该有效?

最佳答案

仍然不清楚为什么带有 out 注释的 SetPrinter 不起作用。然而,一个可接受的解决方法(来自 user3386109)是只清空内存,以便 splint 将其视为已初始化:

pPrinterInfo = malloc(bytesNeeded);

ZeroMemory(pPrinterInfo, bytesNeeded);

if (GetPrinter(hPrinter, 4, (LPVOID)(pPrinterInfo), bytesNeeded, &bytesNeeded)){

ZeroMemory 只是 memset 的别名。

这并不理想,如果不采取额外的措施来修复此警告会更好,但它会为我的情况做。

关于无法摆脱夹板警告 "Field used before definition", "rvalue is used that may not be initialized to a value on some execution",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51016010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com