相关疑难解决方法(0)

static char关键字在函数数组参数中的用途如"char s [static 10]"?

在浏览一些源代码时,我遇到了这样的函数:

void someFunction(char someArray[static 100])
{
    // do something cool here
}
Run Code Online (Sandbox Code Playgroud)

通过一些实验,似乎其他限定符也可能出现在那里:

void someFunction(char someArray[const])
{
    // do something cool here
}
Run Code Online (Sandbox Code Playgroud)

似乎只有[ ]在将数组声明为函数的参数时才允许使用限定符.这些怎么办?为什么功能参数不同?

c arrays parameters static

131
推荐指数
1
解决办法
2万
查看次数

ac程序中的数字前面的静态

所以我正在阅读一篇关于优化int块的排序的博客,其实现在c中.我走过这条线,我不明白:

void nibble_sort_bucket(uint64_t buf[static 1024]) {
Run Code Online (Sandbox Code Playgroud)

缓冲区基本上是要排序的数据,其中的每个int都有4位排序的块,所以它基本上用于基准测试.当我抬起ci中静态的用法时发现了两件事.

  1. 将函数定义保密为文件.
  2. 在函数调用之间保持变量值.

这些都没有意义.有人可以解释为什么你会在一个数字前写静态,这有什么作用?

c static

8
推荐指数
1
解决办法
99
查看次数

将非数组变量的地址传递给声明为“Type ptr[static 1]”的函数参数是否有效?

hereherehere以这种方式定义的函数(在c99 或更新版本中)

void func(int ptr[static 1]){
    //do something with ptr, knowing that ptr != NULL
}
Run Code Online (Sandbox Code Playgroud)

有一个ptr指向 int 类型指针的参数 ( ) 并且编译器可以假定该函数永远不会以 null 作为参数被调用。(例如,编译器可以优化空指针检查,或者在使用空指针调用 func 时发出警告 - 是的,我知道,编译器不需要执行任何操作......)

C17 第6.7.6.3函数声明符(包括原型)第 7 段说:

将参数声明为“类型数组”应调整为“指向类型的限定指针”,其中类型限定符(如果有)是在数组类型派生的 [ 和 ] 中指定的那些。如果关键字static也出现在数组类型派生的 [ 和 ] 中,那么对于函数的每次调用,相应实参的值应提供对数组的第一个元素的访问,该元素至少与指定的元素一样多由大小表达式。

在上述定义的情况下,值ptr必须提供对至少具有元素的数组的第一个元素的访问1。因此很明显,该参数永远不能为空。

我在徘徊的是,使用不属于数组的 int 的地址调用这样的函数是否有效。例如,这是(根据func上面的定义)技术上有效还是未定义的行为:

int var = 5;
func(&var); 
Run Code Online (Sandbox Code Playgroud)

我知道这实际上永远不会成为问题,因为我所知道的编译器没有区分指向 int 数组成员的指针和指向局部 int …

c null standards function undefined-behavior

6
推荐指数
1
解决办法
113
查看次数

标签 统计

c ×3

static ×2

arrays ×1

function ×1

null ×1

parameters ×1

standards ×1

undefined-behavior ×1