当前位置: 首页 > 面试题库 >

函数签名中的restrict是什么意思?

郝池暝
2023-03-14
问题内容
int pthread_create(pthread_t *restrict thread,
              const pthread_attr_t *restrict attr,
              void *(*start_routine)(void*), void *restrict arg);

我想知道限制的含义是什么?


问题答案:

这是C99中引入的内容,它使编译器知道传入的指针与参数中的任何其他指针都没有指向相同的位置。如果向编译器提供此提示,则它可以进行一些更积极的优化而不会破坏代码。

例如,考虑以下功能:

int add(int *a, int *b) {
    return *a + *b;
}

显然,它从指针中添加了两个数字。如果需要,我们可以像这样使用它:

// includes excluded for brevity
int main(int argc, char **argv) {
    int number=4;
    printf("%d\n", add(&number, &number));
    return 0;
}

显然,它将输出8; 它本身增加了4。但是,如果我们添加restrictadd像这样:

int add(int *restrict a, int *restrict b) {
    return *a + *b;
}

那么以前main的命令现在无效;它&number作为两个参数传递。但是,您可以传入两个指向不同位置的指针。

int main(int argc, char **argv) {
    int numberA=4;
    int numberB=4;
    printf("%d\n", add(&numberA, &numberB));
    return 0;
}


 类似资料:
  • 这是一个标准的Kotlin函数(据我所知) 但我不认为它在任何地方解释什么。()意思是...

  • 问题内容: 我已经阅读了一段python代码,但我不知道和*在这段代码中是什么意思: 我只知道*的一种用法:将它具有的所有属性提取到方法或构造函数的参数中。 如果以上功能为真,那么其余的是什么:**? 问题答案: 在 函数头 里面: 收集元组中的所有位置参数。 收集字典中的所有关键字参数。 在 函数调用中 : 将列表或元组解压缩为位置参数。 将字典解压缩为关键字参数。

  • 问题内容: 我用Javassist创建了一个没有实际方法的构造函数 当我试图拿出这堂课的签名时 我懂了 我很困惑“ V”是什么意思?我期望任何一个公共Echo(); 或类似的东西 问题答案: JVM使用一种紧凑的方式来存储方法签名,其中的构造函数被认为是特例。 例如: 表示不带参数的方法 表示它什么也不返回 该计划的其他部分是: -字节 -字符 -双 -浮动 -整数 - 长 -短 -无效 -布尔值

  • 问题内容: 在Swift函数签名中,参数after意味着什么?更具体地说,这是否意味着需要在传递参数之前将其解开,或者在传递参数时(自动)将其解开。这是一个示例: 在这种情况下,该函数是UIButton的目标,因此无论发生什么情况,它都会自动发生。 我的想法是,这意味着您可以期待一个未包装的对象,因此您无需尝试对其进行包装。 问题答案: 这不是完全重复的- 函数签名中 隐式展开的可选 变量 有一些

  • 本文向大家介绍什么是JavaScript中的匿名函数?,包括了什么是JavaScript中的匿名函数?的使用技巧和注意事项,需要的朋友参考一下 函数表达式与函数声明相似,并且具有与函数声明相同的语法。可以定义“命名”函数表达式(例如,在调用堆栈中可能使用表达式的名称)或“匿名”函数表达式。 匿名函数表达式的示例(未使用名称)- 可以使用引用该函数的变量名来调用此函数- 总之,匿名函数是未存储但与变

  • 在这里做什么,它是否将这个函数附加到其他函数?