Ich habe mal ne Frage an die Programmierer unter euch. Kann sein, dass hier das falsche
Forum für sowas ist, aber ich nehme stark an, dass g++-4.3 hierfür fehlerhaften Code generiert.
Jedenfalls kann ich keinen Quellcodefehler entdecken.
Ich habe folgende Funktion, in die cstdarg included habe. Das Programm bricht bei va_start
mit einem SIGILL ab.
Code: Alles auswählen
ERRNO cGenericDevice::SendCommand(unsigned _Direction, unsigned _Command, ...)
{
m_Command.clear();
if (SendENQ())
{
return ERR_NAK;
}
if (ReceiveACK())
{
return ERR_NAK;
}
unsigned CommandSize;
unsigned checksum = 0xff;
m_Command.push_back(STX);
m_Command.push_back(_Direction);
CommandSize++;
checksum -= _Direction;
m_Command.push_back(_Command);
CommandSize++;
checksum -= _Command;
va_list morebytes;
va_start(morebytes, _Command);
unsigned char tempbyte;
for (;;)
{
tempbyte = va_arg(morebytes, unsigned char);
if (tempbyte == '\0')
{
break;
}
m_Command.push_back(static_cast<unsigned>(tempbyte));
CommandSize++;
checksum -= tempbyte;
}
va_end(morebytes);
if (SendByte(CommandSize))
{
return ERR_NAK;
}
checksum -= CommandSize;
m_Command.push_back(checksum);
m_Command.push_back(ETX);
if (SendByteVector(m_Command))
{
return ERR_NAK;
}
return ERR_OK;
}