面试题1:

C语言——总结遇到XX面试题

gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10)

C语言——总结遇到XX面试题

一下子懵逼了。。再使用一段代码

C语言——总结遇到XX面试题

C语言——总结遇到XX面试题

还是不方便看,改写一下

C语言——总结遇到XX面试题

C语言——总结遇到XX面试题

可以推测到求值顺序是从右至左,输出顺序从左到右。但加一个不求值的,好像又不一样了。

同时使用面试题:

C语言——总结遇到XX面试题

C语言——总结遇到XX面试题

	.file	"test1.c"
	.section	.rodata
.LC0:
	.string	"a++ = %d,a = %d,a++ = %d,\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	$10, -4(%rbp)
	movl	-4(%rbp), %edx
	leal	1(%rdx), %eax @
	movl	%eax, -4(%rbp)
	movl	-4(%rbp), %eax
	leal	1(%rax), %ecx
	movl	%ecx, -4(%rbp)
	movl	-4(%rbp), %esi
	movl	%edx, %ecx
	movl	%esi, %edx
	movl	%eax, %esi
	movl	$.LC0, %edi
	movl	$0, %eax
	call	printf
	movl	$0, %eax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609"
	.section	.note.GNU-stack,"",@progbits

以后在做研究...

 

1、printf,求值与输出顺序不一样就。

2、a++:先赋值再+,++a:先计算a再赋值

http://c.biancheng.net/cpp/html/33.html

求值顺序虽是自右至左,但是输出顺序还是从左至右,因此得到的结果是上述输出结果。

不同编译器不一样:

C语言——总结遇到XX面试题

相关文章: