2013-04-09 40 views
6

Tôi nghi ngờ về các hàm nội tuyến. Các hàm nội tuyến sẽ không liên quan đến bất kỳ lệnh gọi hàm nào mà chỉ thay thế định nghĩa hàm ở bất cứ đâu cuộc gọi được thực hiện cho hàm nội tuyến. Các hàm nội tuyến có kiểu thực thi không giống như macro. Điều gì sẽ xảy ra nếu các hàm đệ quy được thực hiện nội dòng?Điều gì sẽ xảy ra nếu chúng ta tạo các hàm đệ quy làm nội dòng?

+3

Bản sao có thể có của http://stackoverflow.com/questions/190232/can-a-recursive-function-be-inline – SecurityMatt

+1

@SecurityMatt có thể là lần tiếp theo tôi sẽ cẩn thận hơn. Cảm ơn bạn. –

+1

câu trả lời kỳ lạ nhưng: Nhiều trình biên dịch cũng có thể nội tuyến mở rộng một số hàm đệ quy; Việc triển khai Microsoft sẽ không nội tuyến các hàm đệ quy trừ khi chúng có một dòng #pragma inline depth (n) xác định độ sâu recusion tối đa mà hàm sẽ có. –

Trả lời

4

"nội tuyến" không phải là đảm bảo, đó là yêu cầu.

Hàm nội tuyến đệ quy của bạn sẽ không (thường) là nội dòng.

  • Theo một số bình luận chỉ ra, có trường hợp đặc biệt (ví dụ sử dụng pragmas biên dịch cụ thể) trong đó nội tuyến càng tốt.
+1

Chỉ vì nó là đệ quy, không có nghĩa là trình biên dịch của bạn sẽ không inline nó: http://msdn.microsoft.com/en-us/library/69hzy453(v=vs.80).aspx – SecurityMatt

+0

cải thiện câu trả lời của bạn, với liên kết được đưa ra bởi @SecurityMatt, có hầu hết các trình biên dịch không inline chức năng đệ quy nhưng một số làm .... đọc bình luận của tôi cho câu hỏi cũng có. –

5

inline chỉ là một đề xuất cho trình biên dịch và không đảm bảo rằng một hàm sẽ được gạch chân.

Rõ ràng, trình biên dịch sẽ không thể nội tuyến một hàm đệ quy vô hạn. Nó có thể không inline nó ở tất cả hoặc nó có thể inline nó chỉ là một vài cấp độ sâu.

+1

[Có vài cấp độ có thể trong trình biên dịch của Microsoft] (http://wiki.answers.com/Q/What_is_inline_function_in_C_Can_you_make_inline_function_recursive_or_not_If_make_can_complier_will_compile_that_code) Chỉ muốn chia sẻ liên kết với bạn –

Các vấn đề liên quan