черт, даже не знаю, в юмор это записать или сюда...
приведу кусок кода, в который я залез час назад. Цель программы — получение информации о сетевых адапторах
int MibII::MIB_GetIPAddress(DWORD *MIB_Array,int max_addresses,
BOOL bShowLoopbackAddress)
{
UINT OID_ipAdEntAddr[] = { 1, 3, 6, 1, 2, 1, 4 , 20, 1 ,1 };
AsnObjectIdentifier MIB_ipAdEntAddr =
{ sizeof(OID_ipAdEntAddr)/sizeof(UINT), OID_ipAdEntAddr };
RFC1157VarBindList varBindList;
RFC1157VarBind varBind[1];
AsnInteger errorStatus;
AsnInteger errorIndex;
AsnObjectIdentifier MIB_NULL = {0,0};
BOOL Exit;
int ret;
int IpCount=0;
DWORD dtmp;
BYTE a1,a2,a3,a4;
varBindList.list = varBind;
varBindList.len = 1;
varBind[0].name = MIB_NULL;
SNMP_oidcpy(&varBind[0].name,&MIB_ipAdEntAddr);
Exit = FALSE;
IpCount=0;
while(!Exit){
ret = Query(ASN_RFC1157_GETNEXTREQUEST,&varBindList,
&errorStatus,&errorIndex);
if(!ret)
Exit=TRUE;
else{
ret = SNMP_oidncmp(&varBind[0].name,&MIB_ipAdEntAddr,
MIB_ipAdEntAddr.idLength);
if(ret!=0){
Exit=TRUE;
}
else
{
dtmp = *((DWORD *)varBind[0].value.asnValue.address.stream);
if (dtmp!=0)
{
// Octets in returned IP addresses are in reverse order
a1=(BYTE)((dtmp>>24) & 0xFF);
a2=(BYTE)((dtmp>>16) & 0xFF);
a3=(BYTE)((dtmp>>8) & 0xFF);
a4=(BYTE)(dtmp & 0xFF);
if ((a4!=127) && (a4!=0))
{
*MIB_Array = (a4<<24) + (a3<<16) + (a2<<8) + a1;
*MIB_Array++;
IpCount++;
}
else
{
if (bShowLoopbackAddress)
{
*MIB_Array = (a4<<24) + (a3<<16) + (a2<<8) + a1;
*MIB_Array++;
IpCount++;
};
};
};
if(IpCount>=max_addresses)
Exit = TRUE;
}
}
}
SNMP_FreeVarBind(&varBind[0]);
return IpCount;
}
Обратите внимаение, какие мудреные условия для выхода из цикла
А условия внутри цикла... нет слов
MIB_Array — это временный статический массив; когда функция завершается, из него копируются данные в другой, такой же массив
max_addresses — отдефайненая константа
... да что это я, смотрите сами:
int CSysInfo::MIBRefreshAddresses()
{
int i,nAddresses=0; BOOL bDiff=FALSE;
for(i=0;i<MAX_IPADDRESSES;i++)
{ m_dwMIBIPArray_tmp[i]=0; };
nAddresses=m_mib.MIB_GetIPAddress(&m_dwMIBIPArray_tmp[0],
MAX_IPADDRESSES,m_bMIBShowLoopback);
if (m_nMIBAddresses!=nAddresses)
{
bDiff=TRUE;
}
else
{
for (i=0;i<nAddresses;i++)
{
if (m_dwMIBIPArray[i]!=m_dwMIBIPArray_tmp[i])
{
bDiff=TRUE;
break;
};
};
};
if (bDiff)
{
for(i=0;i<nAddresses;i++)
{
m_dwMIBIPArray[i]=m_dwMIBIPArray_tmp[i];
};
m_nMIBAddresses=nAddresses;
};
return m_nMIBAddresses;
}
Я, может, ошибаюсь, но этот человек не с Делфи пришел не так давно?
Скажите, это Делфи заставляет так писать или это его личная инициатива?