Есть g++ 4.7.2 и вот такой примитивный код:
#define linux_syscall3( result, command, first, second, third ) __asm__ __volatile__ ("int $0x80" : "=a" ( result ) : "a" ( command ), "b" ( first ), "c" ( second ), "d" ( third ) );
int write( const char *text, const unsigned int len )
{
int result;
linux_syscall3( result, 4, 1 ,text, len );
return result;
}
int read( char *buffer, const unsigned int len )
{
int result;
linux_syscall3( result, 3, 0 ,buffer, len );
return result;
}
class Test
{
public:
Test( const char *text, unsigned int len )
{
write( text, len );
}
~Test()
{
}
};
int main()
{
static const char text[] = "Constructor!\r\n";
static char buffer[512];
int count = read( buffer, 512 );
Test test( text, sizeof( text ) );
write( buffer, count );
return 0;
}
1) Прочитать строку из консоли.
2) Создать класс, и в конструкторе записать в консоль строку «Constructor!\r\n».
3) Записать в консоль то, что было прочитано в п.1
Но вот запись в консоль в конструкторе каким-то образом не дает выполниться п.3. Если же объявление класса перенести ниже вывода введенной строки то все работает. write возвращает ошибку -14( как я понял это значит что неправильный адрес?). При чем это только в релизе, в дебаге все работает нормально.
Собственно где я ошибся?