问题标签 [function-attributes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
11646 浏览

c++ - 不同编译器中的纯/常量函数属性

pure是一个函数属性,表示函数不会修改任何全局内存。
const是一个函数属性,表示函数不读取/修改任何全局内存。

鉴于这些信息,编译器可以进行一些额外的优化。

GCC 示例:

在该示例中,编译器可以将函数计算优化为:

或者,如果您的编译器足够聪明(并且对浮点数不那么严格):

如何以这种方式为不同的编译器标记函数,即 GCC、Clang、ICC、MSVC 或其他?

0 投票
2 回答
228 浏览

python - 使用函数属性存储延迟(潜在)处理的结果

我正在做一些碰撞检测,我非常想在两个不同的上下文中使用相同的函数。在一种情况下,我希望它类似于

在另一个方面,我希望它是

我真的很讨厌在这里写两个函数的想法。只是保持他们的名字直截了当是一个岔路口,而使碰撞检测的界面复杂化是另一个问题。所以我在想:

现在,当我只想进行检查时,我可以说:

或者

在我真正想要检查它们的其他上下文中,我可以这样做:

在这两种情况下,我都不会做比我需要的更多的处理。

我认识到这比前两个函数的代码更多,但它也具有以下优点:

  1. 将我的碰撞检测界面保持为一棵树,节点位于顶层而不是中间层。这似乎更简单。

  2. 用一个方便的窥视功能连接自己。如果我再次使用它,那么我实际上会编写更少的代码。(回应YAGNI,如果我有,我会的)

所以。如果你是众所周知的杀人狂,知道我住在哪里,如果我写了上面的代码,我会期待你的来访吗?如果是这样,您将如何处理这种情况?

0 投票
2 回答
278 浏览

objective-c - 如何用返回类型标记一个函数不返回?

如果我在返回某些内容的函数中没有返回任何内容,编译器将警告该函数没有返回任何内容。

但是如果我调用abort()函数,编译器不会发出警告。我怎样才能像这样标记自己的功能。

0 投票
3 回答
4191 浏览

c++ - 如何将 GCC 的 printf 格式属性与 C++11 可变参数模板一起使用?

我有一个 C++ 类,它是日志系统的前端。它的日志功能是使用 C++11 的可变参数模板实现的:

每个日志记录后端都实现了自己的版本true_log,除其他外,它使用转发的参数来调用vsnprintf。例如:

一切都很好,我很高兴。

现在,我想对log()参数添加一个静态检查:具体来说,我想使用 GCC 的 printf 格式属性。

我首先使用标记log()函数__attribute__ ((format (printf, 2, 3)))(与this第一个“隐藏”参数一样,我需要将参数索引移动一个)。这不起作用,因为如果失败并出现编译错误:

然后,我尝试将相同的属性添加到true_log()函数中。它编译,但实际上没有执行错误检查:我试图传递给log()一些无效的格式/变量组合,并且没有发出警告。也许这种检查“为时已晚”,或者换句话说,关于变量的信息已经在调用链中丢失了?

作为最后的手段,如果我log()用注释__attribute__ ((format (printf, 2, 0))),我会收到有关错误格式字符串的警告,但不会针对无效的格式/变量组合发出诊断。

总结问题:如果我使用 C++11 的可变参数模板,如何从 GCC 进行完整的格式检查?

0 投票
1 回答
2317 浏览

c - 解释 force_align_arg_pointer 函数属性

来自GCC 文档

在 Intel x86 上,该force_align_arg_pointer属性可以应用于单个函数定义,生成一个替代prologueepilogue重新对齐runtime stack. 这支持将使用 4 字节对齐堆栈运行的旧代码与保留 16 字节堆栈的现代代码混合使用SSE compatibility。交替序幕和尾声比常规序幕更慢且更大,并且交替序幕需要scratch register; 如果与regparm attribute. 该force_align_arg_pointer属性与嵌套函数不兼容;这被认为是一个硬错误。

具体来说,我想知道什么是序言、尾声和 SSE 兼容性?

0 投票
3 回答
12028 浏览

python - 装饰器设置函数的属性

我希望仅当登录用户具有所需的权限级别时才能执行不同的功能。

为了让我的生活更简单,我想使用装饰器。下面我尝试permission在“装饰”功能上设置属性 - 如下所示。

但是当我这样做时:

我收到一个错误'function' object has no attribute 'permission_required'

我错过了什么?

0 投票
1 回答
51 浏览

attributes - 如何指定 GNU C 的属性?

GUN C 手册6.30 Declaring Attributes of Functions中,它指出:

您还可以__在每个关键字之前和之后指定属性。这允许您在头文件中使用它们,而不必担心可能的同名宏。例如,您可以使用__noreturn__代替noreturn.

这是否意味着用户可以指定自定义属性?或者还有什么?我肯定很困惑,有人可以帮忙,或者给我一些样品吗?

0 投票
1 回答
1366 浏览

llvm - LLVM 如何将 Attributes::NoUnwind 设置为 Function?

我认为这是一个非常简单的问题,但我无法解决。很伤心。所以。当我做

我用这段代码得到了有趣的 test.cpp:

但是当我想写字符串时PAWI.Attrs = Attribute::None | Attribute::NoUnwind;

在我的项目中,出现错误 IntelliSense: no operator "=" matches these operands operand types are: llvm::Attributes = int我需要做什么?包括所有必要的标题。[操作系统 - Windows 7 x64,LLVM - 3.2]

0 投票
2 回答
5009 浏览

objective-c - Objective C 中的不可用属性是什么意思?

Objective C 中的不可用属性有什么作用?

Clang 中是否有任何关于此属性和其他属性的在线参考?

0 投票
2 回答
1970 浏览

c++ - 函数属性返回_两次

我只是在查找 gcc 的功能属性(http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Function-Attributes.html)并遇到了该returns_twice属性。

而且我完全不知道在什么情况下函数可以返回两次......我快速查找了提到的内容vfork()setjmp()但继续不知道适用场景的外观 - 你们中的任何人都使用过它或可以解释一下吗?