__VA_ARGS__ работает для getlasterror() безопасно?
Макрос LogTxt определяется следующим образом:
#define LogTxt(...) \ BOOL bRet1 = SetEvent(hEvt); \ ATLTRACE(__VA_ARGS__)
В середине исходного кода LogTxt использует GetLastError в качестве аргумента.
...
HANDLE hEvt; HWND hWnd; BOOL bRet2 = ShowWindow(hWnd, 1); LogTxt("GetLastError=%d", GetLastError());...
Я ожидаю, что LogTxt напечатает номер ошибки для ShowWindow, но результатом будет номер ошибки для SetEvent.
__VA_ARGS_ макрос не является безопасным для использования с getlasterror в качестве аргумента.
Что я уже пробовал:
Я пытался
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) { HANDLE hEvt; HWND hWnd; BOOL bRet2 = ShowWindow(hWnd, 1); LogTxt("GetLastError=%d", GetLastError()); return 0; }
и ожидаемый результат был 1400, но фактический результат был 6
GetLastError=6
=> Таким образом, __VA_ARGS__ небезопасно использовать GetLastError в качестве аргумента.
Mohibur Rashid
GetLastError возвращает int, я не вижу никакой проблемы, в этом контексте не выглядит никакой проблемы.