我在編譯C++構建時遇到了一些問題:編譯器收到兩條警告。警告C4715:'d2cs_conn_set_addr':並非所有控制路徑都返回值
connection.c(813):警告C4715: 'd2cs_conn_set_addr':不是所有的控制路徑返回一個值
這其中的代碼點我:
extern int d2cs_conn_set_addr(t_connection * c, unsigned int addr)
{
ASSERT(c,-1);
c->addr = addr;
}
fdwatch_iocp .c(246):警告C4700:使用未初始化的局部變量'ret'
指向這片:
if ((rw & fdwatch_type_read) && !(rw & fdwatch_type_accept) && !(orig_state & fdwatch_type_read))
{
memset(tmpev, 0, sizeof(WSAOVERLAPPED));
ret = WSARecv(fdw_fd(fdw_fds + idx), &wsaBuf, 1, &dummy1, &dummy2, (LPWSAOVERLAPPED)tmpev, NULL);
if ((ret == -1) && (err = GetLastError()) != 997)
{
eventlog(eventlog_level_fatal, __FUNCTION__, "cannot update iocp sock %d with read state: %d", fdw_fd(fdw_fds + idx), err);
//printf("Error %d on WSARecv\n", err);
}
if (fdw_rw(cfd) & fdwatch_type_read && pending_ev->events == fdwatch_type_read)
{
if (hnd(fdw_data(cfd), fdwatch_type_read) == -2)
{
return;
}
memset(tmpev, 0, sizeof(WSAOVERLAPPED));
WSARecv(fdw_fd(fdw_fds + idx), &wsaBuf, 1, &dummy1, &dummy2, (LPWSAOVERLAPPED)tmpev, NULL);
if ((ret == -1) && (err = GetLastError()) != 997)
{
eventlog(eventlog_level_fatal, __FUNCTION__, "cannot update iocp sock %d with read state: %d", fdw_fd(fdw_fds + idx), err);
//printf("Error %d on WSARecv\n", err);
}
我沒有這個代碼,我只是想,沒有錯誤編譯。
你聲明'd2cs_conn_set_addr'返回一個'int',所以你需要滿足這個要求,另一個警告說'ret'沒有被初始化,但是你沒有發佈足夠的代碼來顯示它是如何聲明的 – EdChum
對於第二個,我們需要看到更多的代碼; 「ret」的聲明不在您發佈的代碼片段中。我們需要在聲明和您展示的這種用法之間的一切。 – Angew
'ret'在整個函數中沒有賦值。我認爲只有原作者知道這些功能應該如何工作。 (但是看到代碼在18個月內沒有被觸及,他們可能對修復它沒有興趣。) – molbdnilo