Tôi có một chức năng mà tôi cần để macro'ize. Hàm này chứa các biến tạm thời và tôi không thể nhớ nếu có bất kỳ quy tắc nào về việc sử dụng các biến tạm thời trong các thay thế macro.Macro C có thể chứa các biến tạm thời không?
long fooAlloc(struct foo *f, long size)
{
long i1, i2;
double *data[7];
/* do something */
return 42;
}
Mẫu MACRO:
#define ALLOC_FOO(f, size) \
{\
long i1, i2;\
double *data[7];\
\
/* do something */ \
}
là ok này? (tức là không có tác dụng phụ khó chịu - ngoại trừ những tác dụng phụ thông thường: không phải "loại an toàn", v.v.). BTW, tôi biết "macro là ác" - tôi chỉ đơn giản là phải sử dụng nó trong trường hợp này - không có nhiều sự lựa chọn.
Tại sao bạn cần phải macroize nó? Nếu bạn lo lắng về hiệu suất, thì (a) cơ hội là bạn đang lo lắng vô ích (trừ khi bạn đã thực sự đo nó và kết luận rằng đó là một nút cổ chai đáng kể) và (b) bạn có thể đạt được hiệu quả tương tự, trong một loại cách an toàn, bằng cách làm cho hàm 'inline' (một số trình biên dịch cũ hơn hoặc Microsoft có thể không hỗ trợ điều này). –
@KeithThompson hiệu suất không phải là vấn đề ở đây. Tôi đang viết một thư viện mở rộng và tôi cần một hàm wrapper để làm một số dữ liệu marshalling. Macro chỉ đơn giản là cung cấp một cách dễ bị lỗi do tự động tạo ra rất nhiều mã "keo". –
'return' bên trong macro không làm những gì bạn nghĩ. –