جستجو در تالارهای گفتگو
در حال نمایش نتایج برای برچسب های 'inline'.
1 نتیجه پیدا شد
-
درود و خسته نباشید بر دوستان عزیز؛ در New Features In C درحال بررسی قابلیّتهای اضافه شده به استانداردهای سی بودهاند، درمورد توابع inline به چه صورت کامپایل میشود ؟ یک نمونه به اینصورت نوشتهام : int max_int(const int i, const int j) { return (i > j) ? i : j; } int main (void) { return max_int(10, 15); } و خروجی اسمبلی به اینصورت میباشد : .file "main.c" .text .globl max_int .type max_int, @function max_int: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl %edi, -4(%rbp) movl %esi, -8(%rbp) movl -4(%rbp), %eax cmpl %eax, -8(%rbp) cmovge -8(%rbp), %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size max_int, .-max_int .globl main .type main, @function main: .LFB1: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $15, %esi movl $10, %edi call max_int popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1: .size main, .-main .ident "GCC: (GNU) 9.1.0" .section .note.GNU-stack,"",@progbits و هنگامی که تابع را به صورت inline تعریف میکنم: .file "main.c" .text .globl main .type main, @function main: .LFB1: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $15, %esi movl $10, %edi call max_int@PLT popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1: .size main, .-main .ident "GCC: (GNU) 9.1.0" .section .note.GNU-stack,"",@progbits هر دو در اینجا max_int را فراخوانی کردهاند امّا در خروجی دوّم هیچ label برای max_int تعریف نشده است ! به چه صورت عمل میکند ؟