summaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
Diffstat (limited to 'content')
-rw-r--r--content/mingw-code-golfing-quirks/index.md4
1 files changed, 2 insertions, 2 deletions
diff --git a/content/mingw-code-golfing-quirks/index.md b/content/mingw-code-golfing-quirks/index.md
index 07ab6d4..464b767 100644
--- a/content/mingw-code-golfing-quirks/index.md
+++ b/content/mingw-code-golfing-quirks/index.md
@@ -63,8 +63,8 @@ GCC 文档如此解释 `no-builtin` 选项:
![asm diff](./asm_diff.png)
-显然我们在没有函数签名定义的情况下,又开启了 `no-builtin` 选项,编译器因而无从获取 `printf` 的签名信息,只能从调用推断其签名为 `void printf(const char*, double)`,无法遵循正确的 `varargs` 调用规范设置通用寄存器 `$rdx`,导致 Windows 运行时标准库中的 `printf` 作为 callee 获取第二个参数时永远是全0(`$rdx` 原值);而一旦关闭这一选项,即使不写签名,编译器也能通过内建的函数匹配机制获得完整的 `printf` 签名信息(`int printf(const char*, ...)`),便能生成正确的汇编调用设置 `$rax`,结果也自然没有问题了。
+显然我们在没有函数签名定义的情况下,又开启了 `no-builtin` 选项,编译器因而无从获取 `printf` 的签名信息,只能从调用推断其签名为 `void printf(const char*, double)`,无法遵循正确的 `varargs` 调用规范设置通用寄存器 `$rdx`,导致 Windows 运行时标准库中的 `printf` 作为 callee 获取第二个参数时永远是全0(`$rdx` 原值);而一旦关闭这一选项,即使不写签名,编译器也能通过内建的函数匹配机制获得完整的 `printf` 签名信息(`int printf(const char*, ...)`),便能生成正确的汇编调用设置 `$rdx`,结果也自然没有问题了。
C,很奇妙吧。 xDDD
-> Compiler Explorer 复现链接: https://godbolt.org/z/eh9WK9eqG \ No newline at end of file
+> Compiler Explorer 复现链接: https://godbolt.org/z/eh9WK9eqG