C语言中的asm标签是什么?
What's asm labels in C language?
在浏览glibc代码时,发现一些代码超出了我对C语言的理解,在this commit中有介绍。代码简化如下。
#include <stdio.h>
int foo(void) {
printf("%s \n", __FUNCTION__);
return 0;
}
int bar(void) asm("foo");
int main(int argc, char *argv[]) {
bar();
return 0;
}
输出:
foo
What's asm labels in C language?
C语言中不存在
它是 C 语言的 GCC 扩展,基本上是在编译时用另一个函数名替换函数名。
这个节目:
void bar(void);
void func() { bar(); }
编译为:
func:
jmp bar
但是这个程序:
void bar(void) asm("somename");
void func() { bar(); }
编译为:
func:
jmp somename
我相信,提交的想法是测试sqrt
的GLIBC代码将不会被编译器优化,以便测试代码可以测试generic implementation 不是编译器用来优化的 built-in 编译器实现。
在浏览glibc代码时,发现一些代码超出了我对C语言的理解,在this commit中有介绍。代码简化如下。
#include <stdio.h>
int foo(void) {
printf("%s \n", __FUNCTION__);
return 0;
}
int bar(void) asm("foo");
int main(int argc, char *argv[]) {
bar();
return 0;
}
输出:
foo
What's asm labels in C language?
C语言中不存在
它是 C 语言的 GCC 扩展,基本上是在编译时用另一个函数名替换函数名。
这个节目:
void bar(void);
void func() { bar(); }
编译为:
func:
jmp bar
但是这个程序:
void bar(void) asm("somename");
void func() { bar(); }
编译为:
func:
jmp somename
我相信,提交的想法是测试sqrt
的GLIBC代码将不会被编译器优化,以便测试代码可以测试generic implementation 不是编译器用来优化的 built-in 编译器实现。