code:
case PARM_DELUXEDATA:
return *(int *)&world.deluxedata;
case PARM_SHADOWDATA:
return *(int *)&world.shadowdata;
Если так хочется пропихивать указатели через обычные числа, то лучше GetRenderParm объявлять как, например, long (*RenderGetParm)( int parm, int arg );
long на ilp32 остается 32-битным, а на i32lp64 станет 64-битным, что соответствует длине указателя. Можно и лучше ssize_t, конечно, но у меня есть сомнения насчёт существования ssize_t в MSVC6.
a1batross писал: long на ilp32 остается 32-битным, а на i32lp64 станет 64-битным, что соответствует длине указателя.
Никогда, пожалуйста, никогда не используйте long, если пишете хоть сколько-нибудь кроссплатформенный код. Забудьте про существование этого ключевого слова вообще. И добавьте в свои линтеры правило - выдавать error, если этот тип встретился в коде, и запрещать коммит.
a1batross
Ты не учёл, что long 32-битный в 64-битном CL (MSVC). Ох уж это поколение gcc/clang.
Поэтому и говорю - чтобы не учить наизусть списки, где лонг 32-битный, а где 64-битный, проще отказаться от него совсем.
От того, что ты назовёшь этот компилятор ущербным, сто или двести раз, его популярность никак не уменьшится. Поэтому забывать про него не стоит.
Нужно просто самому сделать тайпдефы в зависимости от битности, на __int32 или __int64. И никакие лонги не нужны.
XaeroX ну почему. Можно принципиально его не поддерживать.
Добавлено 17-06-2019 в 18:10:
Поясню. Мне конкретно наплевать на его популярность. Это не моё дело, вы там сами как-нибудь свои проблемы решайте.
А очередной #ifdef _MSC_VER в коде делает моим глазам больно. Я не обязан ни перед кем с ним считаться, тем более с Microsoft. Это я их клиент, а не они мои.