#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, short, short, short, short, short, short,
                          short, short, short, short);
int /*<<< orphan*/ setbuf(int /*<<< orphan*/, int /*<<< orphan*/ *);
int /*<<< orphan*/ stdout;
int main(void) {
  setbuf(stdout, NULL);
  short char_size = sizeof(char);
  short short_size = sizeof(short);
  short int_size = sizeof(int);
  short long_size = sizeof(long);
  short unsigned_char_size = sizeof(unsigned char);
  short unsigned_short_size = sizeof(unsigned short);
  short unsigned_int_size = sizeof(unsigned int);
  short unsigned_long_size = sizeof(unsigned long);
  short float_size = sizeof(float);
  short double_size = sizeof(double);
  printf("Größen der Datentypen in Bytes:\nChar: %i\nShort: %i\nInt: %i\nLong: "
         "%i\nUnsigned Char: %i\nUnsigned Short: %i\nUnsigned Int: "
         "%i\nUnsigned Long: %i\nFloat: %i\nDouble: %i\n",
         char_size, short_size, int_size, long_size, unsigned_char_size,
         unsigned_short_size, unsigned_int_size, unsigned_long_size, float_size,
         double_size);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %rbx
sub    $0x48,%rsp
movl   $0x0,-0xc(%rbp)
mov    0x2ea9(%rip),%rax
mov    (%rax),%edi
xor    %eax,%eax
mov    %eax,%esi
call   1030 <setbuf@plt>
movw   $0x1,-0xe(%rbp)
movw   $0x2,-0x10(%rbp)
movw   $0x4,-0x12(%rbp)
movw   $0x8,-0x14(%rbp)
movw   $0x1,-0x16(%rbp)
movw   $0x2,-0x18(%rbp)
movw   $0x4,-0x1a(%rbp)
movw   $0x8,-0x1c(%rbp)
movw   $0x4,-0x1e(%rbp)
movw   $0x8,-0x20(%rbp)
mov    -0xe(%rbp),%si
mov    -0x10(%rbp),%dx
mov    -0x12(%rbp),%cx
mov    -0x14(%rbp),%r8w
mov    -0x16(%rbp),%r9w
mov    -0x18(%rbp),%bx
mov    -0x1a(%rbp),%r11w
mov    -0x1c(%rbp),%r10w
mov    -0x1e(%rbp),%ax
lea    0xe53(%rip),%rdi
movswl %si,%esi
movswl %dx,%edx
movswl %cx,%ecx
movswl %r8w,%r8d
movswl %r9w,%r9d
movswl %bx,%ebx
mov    %ebx,(%rsp)
movswl %r11w,%r11d
mov    %r11d,0x8(%rsp)
movswl %r10w,%r10d
mov    %r10d,0x10(%rsp)
cwtl
mov    %eax,0x18(%rsp)
movswl -0x20(%rbp),%eax
mov    %eax,0x20(%rsp)
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x48,%rsp
pop    %rbx
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
mov    0x2eb8(%rip),%rax
mov    (%rax),%edi
xor    %esi,%esi
call   1030 <setbuf@plt>
sub    $0x8,%rsp
lea    0xec4(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    $0x4,%ecx
mov    $0x8,%r8d
mov    $0x1,%r9d
push   $0x8
push   $0x4
push   $0x8
push   $0x4
push   $0x2
call   1040 <printf@plt>
add    $0x30,%rsp
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@stdout = global i32 0
@.str = [164 x i8] c"Gr\C3\B6\C3\9Fen der Datentypen in Bytes:\0AChar: %i\0AShort: %i\0AInt: %i\0ALong: %i\0AUnsigned Char: %i\0AUnsigned Short: %i\0AUnsigned Int: %i\0AUnsigned Long: %i\0AFloat: %i\0ADouble: %i\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i16
%3 = alloca i16
%4 = alloca i16
%5 = alloca i16
%6 = alloca i16
%7 = alloca i16
%8 = alloca i16
%9 = alloca i16
%10 = alloca i16
%11 = alloca i16
store i32 0, i32* %1
%12 = load i32, i32* @stdout
%13 = call i32 @setbuf(i32 %12, i32* null)
store i16 1, i16* %2
store i16 2, i16* %3
store i16 4, i16* %4
store i16 8, i16* %5
store i16 1, i16* %6
store i16 2, i16* %7
store i16 4, i16* %8
store i16 8, i16* %9
store i16 4, i16* %10
store i16 8, i16* %11
%14 = load i16, i16* %2
%15 = load i16, i16* %3
%16 = load i16, i16* %4
%17 = load i16, i16* %5
%18 = load i16, i16* %6
%19 = load i16, i16* %7
%20 = load i16, i16* %8
%21 = load i16, i16* %9
%22 = load i16, i16* %10
%23 = load i16, i16* %11
%24 = call i32 @printf(i8* getelementptr inbounds ([164 x i8], [164 x i8]* @.str, i64 0, i64 0), i16 signext %14, i16 signext %15, i16 signext %16, i16 signext %17, i16 signext %18, i16 signext %19, i16 signext %20, i16 signext %21, i16 signext %22, i16 signext %23)
ret i32 0
}

LLVM IR (-O2):
@stdout = global i32 0
@.str = [164 x i8] c"Gr\C3\B6\C3\9Fen der Datentypen in Bytes:\0AChar: %i\0AShort: %i\0AInt: %i\0ALong: %i\0AUnsigned Char: %i\0AUnsigned Short: %i\0AUnsigned Int: %i\0AUnsigned Long: %i\0AFloat: %i\0ADouble: %i\0A\00"
define i32 @main() {
%1 = load i32, i32* @stdout
%2 = tail call i32 @setbuf(i32 %1, i32* null)
%3 = tail call i32 @printf(i8* getelementptr inbounds ([164 x i8], [164 x i8]* @.str, i64 0, i64 0), i16 signext 1, i16 signext 2, i16 signext 4, i16 signext 8, i16 signext 1, i16 signext 2, i16 signext 4, i16 signext 8, i16 signext 4, i16 signext 8)
ret i32 0
}