tôi có chức năng: foo()
vấn đề #define nếu gọi nó từ bên trong một if() chặn
Tôi muốn viết một #define
để đặt 'trước mặt' của foo()
(một shim tôi đoán) để thêm debug vào phía trước của foo()
. Vì vậy, các #define
nên nhìn này này:
#define foo(dev) { \
printk("%s: get %lx\n", (dev)->name); \
foo_orig(dev); \
}
Và sau đó tôi đổi tên foo()
-foo_orig()
.
này hoạt động OK nếu foo()
hàm được gọi trong 'cách ly' như thế này:
foo(dev);
NHƯNG, nếu gọi của nó trong vòng một if()
sau đó nó là một vấn đề biên dịch ...
if (something() && foo(dev)) {
..
Tôi đã giải thích vấn đề chưa? và có một giải pháp cho điều này?
Vấn đề là tôi thực sự cần shim như xác định bởi vì tôi cần mã để sống trong chức năng gọi thay vì foo()
. [Lý do cho điều này là bởi vì tôi cần phải đổ ra EIP các chức năng gọi điện thoại vì lý do debug (tức là tôi cần phải biết ai đang gọi foo()
]
Tại sao không làm một chức năng thay vì một vĩ mô mà các cuộc gọi printk và sau đó trả về giá trị của foo_orig? – PherricOxide
Không chắc chắn bạn sử dụng trình biên dịch nào nhưng bạn sẽ có thể mở rộng các chỉ thị tiền xử lý và xem mã mà trình biên dịch thấy (và không thích) sau khi mở rộng –