LINUX.ORG.RU

кастинг констант


0

0

где-то в хедере
#define MY_DEF_NUMBER (1)

где-то в коде
foo((void*)MY_DEF_NUMBER);

где-то в другом коде
void foo(void* context_p)
{
   int var = (int)context_p;
}

я вот наткнулся на такой кусочек кода. честно говоря, 
никода такого не видел. это рабочий пример. 
это нормальный код (безопасность, стиль, стандарт) для С?
anonymous

> это нормальный код (безопасность, стиль, стандарт) для С?

Нет.

Может сглючить на 64 битах.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

P.S.

Более того - некоторые компиляторы вообще бред наделают. Недавно сталкивался с похожим кодом - рухнуло по segv, будучи скомпилиованным компаковским компилером с ключом -O3

Die-Hard ★★★★★
()

спасибо
это работает на sparc-sun-solaris2.6/2.8.1 и собрано gcc-2.8.1

anonymous
()

Приведение типов, и арифметические действия над указателями это опастно!!!

anonymous
()

последнему анонимусу точно опасТно
гыгы =)

anonymous
()
Ответ на: комментарий от lg

lg (*) (2003-09-18 18:12:55.495459): > по мне если sizeof(void *) >= sizeof(int) то все нормально

Ну, скорее всего, проканает. Но я бы так делать не стал.

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.