为什么用 gcc 编写内联汇编有两种方法?

发布于 2024-12-11 18:47:38 字数 104 浏览 0 评论 0原文

asm volatile(...);

__asm__ __volatile__(...);

我看到两者都被使用;为什么要创建一些重复的东西?

asm volatile(...);

__asm__ __volatile__(...);

I see both are used; why create some duplicate stuff?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橘和柠 2024-12-18 18:47:38

C 标准保留“asm”供用户出于任何目的使用。因此,GCC 提供了 __asm__ 表示法来避免进入用户的名称空间(因为以双下划线开头的标识符是为实现保留的)。

双下划线的表示法很笨拙,因此 GCC 提供了没有双下划线的更令人愉快的界面。但如果您打开符合标准的编译模式(例如-std=c99),则asm选项将被关闭。通过使用双下划线符号书写,它始终可用。

因此,asm 读起来更愉快,但 __asm__ 符合 C 标准。

The C standard reserves 'asm' for use by users for any purpose. Therefore, GCC provides the __asm__ notation to avoid running into the user's name space (because identifiers starting with double underscore are reserved for the implementation).

The notation with the double underscore is ungainly, so GCC provides the pleasanter interface without the double underscores. But if you turn on a standard-compliant compilation mode (such as -std=c99), the asm option is turned off. By writing with the double underscore notation, it is always available.

So, asm is pleasanter to read, but __asm__ is compliant with the C standard.

橙味迷妹 2024-12-18 18:47:38

来自 GCC 内联汇编 HOWTO “您可能有注意到这里我使用了 asm__asm__ ,如果关键字是有效的,我们可以使用 __asm__asm 与我们程序中的某些内容发生冲突。”

From GCC Inline Assembly HOWTO "You might have noticed that here I’ve used asm and __asm__. Both are valid. We can use __asm__ if the keyword asm conflicts with something in our program."

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文