clangでプリプロセスとコンパイルのみを行い、アセンブリを確認する

```c:megu.c
#include <stdio.h>

void metyasugoi(int a, int b) {
  printf("Bye Bye.");
}
```

```c:hoge.c
#include <stdio.h>

void metyasugoi(int a, int b, int c) {
  printf("Hello World.");
}
```

```c:fuga.c
#include <stdio.h>

void metyasugoi(int a, int b);

int main(int argc, char **argv) {
  metyasugoi(1, 2);
}
```

参考: [ソースコードのマシンコードへのコンパイルのステップ](https://cs50.jp/x/2021/week2/notes/#:~:text=%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E3%83%9E%E3%82%B7%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%81%B8%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%81%AF%E3%80%81%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%81%AF%E3%82%88%E3%82%8A%E5%B0%8F%E3%81%95%E3%81%AA%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%8B%E3%82%89%E6%A7%8B%E6%88%90%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82)

アセンブリを確認する

```sh
$ ls
fuga.c  hoge.c  megu.c
$ clang fuga.c hoge.c megu.c -S
$ ls
fuga.c  fuga.s  hoge.c  hoge.s  megu.c  megu.s
```

```assembly:megu.s
	.section	__TEXT,__text,regular,pure_instructions
	.build_version macos, 12, 0	sdk_version 12, 0
	.globl	_metyasugoi                     ## -- Begin function metyasugoi
	.p2align	4, 0x90
_metyasugoi:                            ## @metyasugoi
	.cfi_startproc
## %bb.0:
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register %rbp
	subq	$16, %rsp
	movl	%edi, -4(%rbp)
	movl	%esi, -8(%rbp)
	leaq	L_.str(%rip), %rdi
	movb	$0, %al
	callq	_printf
	addq	$16, %rsp
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.section	__TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
	.asciz	"Bye Bye."

.subsections_via_symbols
```

```assembly:hoge.s
	.section	__TEXT,__text,regular,pure_instructions
	.build_version macos, 12, 0	sdk_version 12, 0
	.globl	_metyasugoi                     ## -- Begin function metyasugoi
	.p2align	4, 0x90
_metyasugoi:                            ## @metyasugoi
	.cfi_startproc
## %bb.0:
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register %rbp
	subq	$16, %rsp
	movl	%edi, -4(%rbp)
	movl	%esi, -8(%rbp)
	movl	%edx, -12(%rbp)
	leaq	L_.str(%rip), %rdi
	movb	$0, %al
	callq	_printf
	addq	$16, %rsp
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.section	__TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
	.asciz	"Hello World."

.subsections_via_symbols
```

```c:fuga.s
	.section	__TEXT,__text,regular,pure_instructions
	.build_version macos, 12, 0	sdk_version 12, 0
	.globl	_main                           ## -- Begin function main
	.p2align	4, 0x90
_main:                                  ## @main
	.cfi_startproc
## %bb.0:
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register %rbp
	subq	$16, %rsp
	movl	%edi, -4(%rbp)
	movq	%rsi, -16(%rbp)
	movl	$1, %edi
	movl	$2, %esi
	callq	_metyasugoi
	xorl	%eax, %eax
	addq	$16, %rsp
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
.subsections_via_symbols
```

ちなみにわざとmetyasugoiシンボルが重複している為、`-S`でアセンブルの前で止めない場合、duplicate symbolのErrorが出ます.

```
$ clang fuga.c hoge.c megu.c
duplicate symbol '_metyasugoi' in:
    /var/folders/zs/bd70xg051z111gt2nkr77q200000gn/T/hoge-c0cc77.o
    /var/folders/zs/bd70xg051z111gt2nkr77q200000gn/T/megu-f8552b.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
```