Tag: 限制

将限制限定的指针参数分配给本地的限制限定变量

在阅读C标准,6.7.3.1“ restrict正式定义”后,我有以下误解。 我想知道以下代码是否会立即导致未定义的行为: void foo(int *restrict p) { int *restrict q = p; } 很明显, q被赋予基于另一个受限指针p 。 不清楚的是,这两个指针是否与同一个块(函数本身)相关联,或者与不同的块( p与函数本身, q与其复合语句体)相关联,因为,例如。 int *restrict p; { int *restrict q = p; } 不会导致未定义的行为(可以在子块中创建别名指针)。 MSVC ++中限制关键字和局部变量的最佳答案表明int *restrict q = p + 1; 会很好,但是[至少在C标准的情况下]并不是真的,因为表达式p + 1仍然基于p 。 该块的定义见6.7.3.1 p2: 如果[某个指针声明] D出现在一个块内并且没有存储类extern ,那么让B表示该块。 如果D出现在函数定义的参数声明列表中,则让B表示关联的块。 […] 那么函数的“关联块”与此上下文中的函数体是一样的吗? 因为我没有立即在文本前面找到对“相关块”一词的任何解释。

如何打印最大可能的浮点数并在C中加倍?

对于以下代码, #include #include #include int main(void) { printf(“double max = %??\n”, DBL_MAX); printf(“double min = %??\n”, DBL_MIN); printf(“double epsilon = %??\n”, DBL_EPSILON); printf(“float epsilon = %??\n”, FLT_EPSILON); printf(“float max = %??\n”, FLT_MAX); printf(“float min = %??\n\n”, FLT_MIN); return 0; } 为了让printf将各种数量显示为适当大小的十进制数,我必须使用哪些说明符代替??

如何计算C中矩阵行中的元素数量

使用整数数组,Id喜欢首先向用户询问他想要在数组中的行数和列数(让我们称之为x和y)(我知道如何执行此步骤)。 重要的是,当用户输入将存储在矩阵中的值时,将从一行输入读入一行,从第二行输入读入第二行,依此类推。 所以一行输入= 1行。 因此,如果他已经定义了x个列,他应该为第一行输入x个数字,所有这些都在一行上。 如何检查x号码是否确实已输入线路? 如果输入的内容越来越少,我将打印错误消息。 是否有某种命令可以检查1行的大小,以便它可以根据用户定义的x进行检查? 到目前为止我编写的代码涉及简单的步骤,但我对如何实现此检查几乎没有任何想法,以确认用户输入的数量与他最初定义的输入量相同。 非常感谢!

在ac程序中表达式是否太长可以编译gcc?

假设我将一个非常长的等式输入到一行c代码(.c或.h文件)中,该代码长度为数千(可能是数万)个字符; 例如 y = (2*(36*pow(x,2)*pow(A[n][j],5)*B[n][j] + (several thousand more such expressions) ) ; (这里只是将x作为变量,A,B作为双指针等)。 在gcc编译器无法正确编译代码之前,是否有一行代码在.c或.h文件中有多长时间? 我已经为#c阅读了几个关于这个问题的相关讨论,但不仅仅是简单的c。 我从来没有从gcc中收到任何关于我的代码中包含太长行的错误,但我想更加确定这一点。 编辑:在回应下面的一些评论时,我现在意识到我问了两个(我认为密切相关的)问题: (1)在gcc编译器可能发生错误/引发错误之前,行中c可以有多长时间有限制吗? (2)在gcc编译器可能发生错误/引发错误之前,表达式的复杂程度是否有限制? (例如,我们可以将很长的一行分成几行,但它们都是同一个表达式的一部分)。

和的等价性

这保证总是如此: std::numeric_limits::max() == INT_MAX C ++标准对此有何评论? 我在标准中找不到任何明确说明这一点的参考,但我继续读到那些应该是等价的。 对于同时实现C99(至少long long部分)和C ++ 98的编译器,C99类型不是C ++ 98标准呢? 我不确定是否有任何保证这一点始终成立: std::numeric_limits::max() == ULLONG_MAX 这是一个合理的假设吗?

在python中检测C类型限制(“limits.h”)?

我在python中做了一个小测试程序,在很多情况下测试一些C函数。 这个python程序使用ctypes导入和使用我的C函数。 但我也想测试最小值和最大值的情况(例如limits.h的ULLONG_MAX )。 但由于其中一些限制可能取决于系统,我宁愿避免在我的程序中对其进行硬编码; 我宁愿动态地得到它。 是否有可能在python中获得这些限制值?

FAT32每个目录限制的文件数

我正在尝试在Xillinx Kintex 7卡上用C编码FAT系统。 它配备了MicroBlaze,我已经设法创建了大部分所需的function。 我面临的问题是关于文件夹的总容量,我在网上看到在FAT32中一个文件夹应该能够包含超过65000个文件但是我已经安装了系统我是每个文件夹限制为509个文件。 我认为这是因为我理解了FAT32的工作方式,但这是我迄今为止所做的: 我创建了一个格式化函数,它将正确的数据写入MBR(扇区0)和卷ID(我的磁盘上的扇区2048)。 我创建了一个函数来写入根目录的内容(第一个集群在扇区124 148上开始) 我创建了一个函数来编写一个包含大小为X的N个文件的新文件夹。文件夹的名称写在根目录(扇区124148)中,文件名写在下一个簇(扇区124212,因为我已经将簇大小设置为64个扇区)。 最后,文件的内容(一个简单的计数器)写在从扇区124276开始的下一个簇上。 这里的问题是文件夹的大小为1簇,这意味着它的容量为64扇区= 32KB,我只能在目录中创建512(减2)个文件! 然后,我的问题是:是否可以更改群集数量的文件夹大小? 目前我只使用1个集群,我不明白如何更改它。 它与驱动器的FAT有关吗? 在此先感谢您的帮助! 注意:当我将其插入时,Windows可以识别我的驱动器,我可以访问和读取每个文件(超出510限制的文件除外),我可以通过Windows资源管理器创建新文件。 它显然来自我理解文件创建和文件夹创建的方式!

C中“限制”的关键字相反?

由于严格别名可能有助于编译器更好地优化,因此C99引入了restrict关键字,如果程序员保证不会通过指向不同类型的指针访问它,则可以将其用作变量的限定符。 但是,由于多种原因,不同类型之间的类型转换是不可避免的,这将使编译器假设一个指针不是另一个指针的别名。 因此,变通方法是通过传递-fno-strict-aliasing (GCC标志)来禁用全局严格别名优化。 这完全没有意义,因为可能只有两个指针不应该完全优化。 因此,为什么不引入相反的restrict关键字,告诉编译器不要假设这两个指针指向不同的地址。 这有点类似于volatile所做的,并告诉编译器这个变量被大大改变,所以以特殊的方式对待它们。 是否可以创建这样的关键字? 编辑:有一种方法可以解决这个问题。 请参阅下面的yano评论。

使用数组限制?

有没有办法告诉C99编译器我要访问给定数组的唯一方法是使用myarray [index]? 说这样的话: int heavy_calcualtions(float* restrict range1, float* restrict range2) { float __I promise I won’t alias this__ tmpvalues[1000] = {0}; …. heavy calculations using range1, range2 and tmpvalues; …. } 通过使用restrict我承诺我不会为range1和range2设置别名但是如何为我的函数内部声明的数组做同样的事情?

SQLite3并限制结果数量

是否有一种干净的方法来限制SQ​​Lite3 SELECT语句的命中数? 例如,我可以查询SELECT * FROM myTable WHERE name=’Smith’; 意识到我可能会遇到成千上万的点击。 我想让SQLite3告诉我它遇到的前10个然后终止查询。 我该怎么做呢? 如果SQLite3没有立即提供,那么我可以在SQLite3源代码中编辑任何可以重建的内容吗? 假设我在一个只有一个线程的环境中,我想在合理的时间内控制回来。