input ( arglist );Q1: If x and y are integer variables, what is the result of running the following program segment if 1 and 2 are entered at the keyboard?
main ()
{
int x, y;
input (&x, &y);
output (x, y);
}
1 27 0 0 0 0 0 0
2 22 0 4 0 0 0 0
2 26 3 1 0 0 3 3
2 26 3 2 0 0 3 4
2 20 4 4 0 0 0 0
2 20 4 3 0 0 0 0
2 24 0 2 0 0 0 0
2 20 4 2 0 0 0 0
2 20 4 1 0 0 0 0
2 25 0 2 0 0 0 0
2 26 0 0 0 0 1 0
2 23 0 0 0 0 0 0
1 21 0 0 0 0 0 1
1 28 0 0 0 0 0 0
1
0
Q2: How do things change if the input statement becomes input (x, y);
Q3: What is short-circuit code?
Q4: Does gcc use short-circuit code?
Q5: What would be the result from running each of the following C programs? Why?
/* gcc version */
#include <stdio.h>
main()
{
int i = 0,j = 0;
if (i && j && (j = j + 1))
i++;
printf ("%d %d\n", i, j);
}
/* pcc version */
main()
{
int i = 0,j = 0;
if (i && j && (j = j + 1))
i++;
output (i, j);
}
What about compiling the following?
/* pcc version */
main()
{
int i = 0,j = 0;
if (i && j && (j = j + 1))
i++;
output (i, j);
}
Let's take a look at the code generation and production/semantic action rules for the following flow-of-control statements on pp. 492-3:
main()
{
int i, sum = 0;
for (i = 0; i <= 5; i = i + 1)
{
sum = sum + i;
}
output (i, sum);
}
1 27 0 0 0 0 0 0
2 22 0 5 0 0 0 0
2 26 2 1 0 0 3 2
2 26 2 1 0 0 3 1
2 12 4 1 2 2 0 7
2 26 0 0 0 0 3 3
2 19 0 0 0 0 0 8
2 26 0 1 0 0 3 3
2 18 4 3 0 0 0 16
2 19 0 0 0 0 0 13
2 1 4 1 2 3 3 4
2 26 4 4 0 0 3 1
2 19 0 0 0 0 0 4
2 1 4 2 4 1 3 5
2 26 4 5 0 0 3 2
2 19 0 0 0 0 0 10
2 20 4 2 0 0 0 0
2 20 4 1 0 0 0 0
2 25 0 2 0 0 0 0
2 26 0 0 0 0 1 0
2 23 0 0 0 0 0 0
1 21 0 0 0 0 0 1
1 28 0 0 0 0 0 0
4
0
0
5
1
/* gcc version */
#include <stdio.h>
main()
{
int i, sum = 0;
for (i = 0; i <= 5; i = i + 1)
{
sum = sum + i;
}
printf ("%d %d\n", i, sum);
}
.file "z.c"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "%d %d\n"
.text
.globl main
.type main, @function
main:
pushl %ebp
xorl %edx, %edx
movl %esp, %ebp
xorl %eax, %eax
.L5:
addl %eax, %edx
incl %eax
cmpl $5, %eax
jle .L5
pushl %edx
pushl $6
pushl $.LC0
call printf
leave
ret
.size main, .-main
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)"