2014-12-17 5 views
1

((My_LengthilyNamedClass *)this)->someMemberC: производительный временные переменные, чтобы избежать частых типажей

... Я устаю от них появляются все мое кодовую, много раз даже в пределах одной и той же функции.

Каков подходящий способ обработки таких вещей в C? Я знаю, что копирование этого в правильно типизированную стек/автоматическую переменную с более коротким именем - это один из способов избежать приведения, но я предполагаю, что это приведет к дополнительным, потенциально ненужным распределениям стека.

Можно ли использовать define внутри отдельных функций, чтобы это стало проще? Есть define s путь? Поскольку это код для платформы обработки в реальном времени, и эти вещи появляются повсюду, я бы идеально хотел придерживаться того, что было наиболее эффективным.

+3

Temp переменные не всегда вызывают накладных расходов см [делать временные переменные замедлить мою программу?] (Http://stackoverflow.com/q/26949569/1708801) –

+0

использовать встроенный функция. –

+0

BTW Какой оригинальный тип 'this'? –

ответ

4

Компиляторы довольно хорошо оптимизируют. Я думаю, вы не будете иметь никаких проблем с:

My_LengthilyNamedClass *const ptr = this; 

Если вы действительно параноик, вы можете использовать макрос:

#define THIS ((My_LengthilyNamedClass *)this) 

THIS->someMember = 5; 

#undef THIS 
2

Если у вас есть многие из этих слепков, вы можете изменить:

((My_LengthilyNamedClass *)this)->someMember 

в

My_LengthilyNamedClass *that = (My_LengthilyNamedClass *) this; 

/* ... */

that->someMember