我正在研究一个旧的代码库,几乎每次调用free()都会在其参数上使用强制转换.例如,
free((float *)velocity);
free((float *)acceleration);
free((char *)label);
Run Code Online (Sandbox Code Playgroud)
其中每个指针都是相应的(和匹配的)类型.我完全没有理由这样做.这是非常古老的代码,所以我想知道它是否是K&R的东西.如果是这样,我实际上希望支持可能需要这个的旧编译器,所以我不想删除它们.
使用这些演员阵容有技术原因吗?我甚至没有看到使用它们的实用理由.在释放数据类型之前提醒自己有什么意义?
编辑:这个问题不是另一个问题的重复.另一个问题是这个问题的一个特例,如果亲密的选民能够阅读所有的答案,我认为这是显而易见的.
Colophon:我给出了"常量答案"的核对标记,因为这可能是为什么需要这样做的真正原因; 然而,关于它是一个ANSI C之前的习惯(至少在一些程序员中)的答案似乎是它在我的情况下使用的原因.很多人在这里有很多好处.感谢您的贡献.
我有一些代码打印程序使用的内存量.该行类似于:
printf("The about of RAM used is %u", anIntVariable*sizeof(double) );
Run Code Online (Sandbox Code Playgroud)
其中anIntVariable是double数组元素数的int变量.无论如何,在32位系统上我从来没有遇到任何问题,但在64位系统上,我得到一个编译器警告关于使用"%u"作为无符号长整数.使用"%lu"作为格式代码可以解决64位问题,但会导致编译器抱怨32位,因为类型返回unsigned int.我发现,确实,sizeof(double)在32位与64位系统上返回不同的值.我找到了一些网页指南,用于将代码从32位转换为64位但是我宁愿让代码同时适用于两者而不仅仅是来回转换.
如何以独立于平台的方式编写此行?我知道很多方法可以使用预处理器指令来实现它,但这似乎是一个黑客攻击.当然有一种我没有意识到的优雅方式.
在UNIX和Linux的某些版本中,有一个banner命令(通常是/ usr/bin/banner)可以输出如下输出:
##### ####### # ##### # #
# # # # # # # # #
# # # # # # #
##### # # # # ###
# # ####### # # #
# # # # # # # # #
##### # # # ##### # #
Run Code Online (Sandbox Code Playgroud)
在其他版本中,banner命令(通常是/ usr/games/banner)打印出一个ENORMOUS横幅,就像你在1980年制作的Printshop一样,适合在生日派对上使用.
我倾向于喜欢在我的脚本中使用横幅,但由于这个问题它本身就是不可移植的.UNIX中的"banner"部分是什么,为什么不是POSIX标准的一部分?这是一些BSD vs SysV的差异,但为什么还没有解决?
我知道有一个figlet再现了我喜欢的横幅.但我对这个命令的问题是可移植性.横幅应该是UNIX,IMHO的一部分,即使它们需要在不同的名称下包含两个版本(尽管理想情况下,行为应该合并到一个命令中,并带有所需输出的选项).
如果我使用横幅广告,那么在脚本的可移植性方面我是不是很幸运?
我有两个包含xy坐标(星星)的列表.我也可能有每颗恒星的亮度(亮度).现在每颗星都有随机的位置抖动,每张图像中可能会有一些额外或缺失的点.我的问题是,"这种数据集的最佳2D点匹配算法是什么?" 我想两者都是简单的线性(平移,旋转,缩放)和非线性(比如坐标中的n次多项式).在点匹配领域的术语中,我正在寻找能够在具有噪声和杂散点的2D点匹配程序之间的枪战中获胜的算法.可能存在不同的"获胜者",这取决于是否使用标签信息(幅度)和/或变换被限制为线性.
我知道有许多类别的2D点匹配算法和每个类中的许多算法(实际上可能总共数百个)但我不知道哪个(如果有的话)被认为是"最好的"或"最标准的"由计算机视觉领域的人.可悲的是,我想读的很多文章都没有在线版本,我只能阅读摘要.在我确定一个特定的算法来实现它之前,很高兴听到一些专家将小麦与谷壳分开.
我有一个使用三角形的工作匹配程序,但它经常失败(约5%的时间),这样解决方案转换有明显的扭曲,但没有明显的原因.这个程序不是我写的,而是来自近20年前写的一篇论文.我想编写一个执行最强大的新实现.我假设(希望)在这个领域取得了一些进展,这使得这看似合理.
对于在PostgreSQL中使用继承经验的人:是否值得使用它,或者最好不要使用它?你会在哪种情况下使用它?
说实话,我不完全理解关系模型和OO模型之间的区别......
文件名的长度如何影响磁盘上剩余的存储空间?
我意识到这是依赖于文件系统的.特别是我在考虑EXT系列文件系统.我不完全了解inode如何影响磁盘空间以及文件名本身的存储方式.很难获得这个问题的相关搜索结果.这就是我在这里问的原因.在linux上,最大文件名长度通常为255或256个字符.创建文件系统时,每个文件名的"保留"空间量是多少?换句话说,磁盘存储是否不受实际文件名的影响,因为已经使用了最大值?还是比这更复杂?
假设我有一个名为"joe.txt"的文件并将其重命名为"joe2.txt".此后可用磁盘空间量是否减少了?那些更长的名字如"joe_version.txt"或"joe_original_version_with_bug_that_Jim_solved.txt"呢?我担心8,16,32,64等字符的阈值.我将存储数百万张图片.我之前从未担心过这样的问题,所以我不能完全确定它是如何工作的.
虽然EXT是我正在使用的唯一文件系统,但讨论FAT和其他可能对其他有类似问题的人有用.
我不知道我是不是以正确的方式去做这件事,或者我完全愚蠢地做了些什么.
我有一个文件系统,可以容纳一堆图像文件.这些是可变大小的大型地图图像.我正在使用我的数据库对它们进行空间查询.
基本上我想要做的就是能够将图像的信息(名称,目录和空间信息)添加到数据库并从数据库中删除图像(所有表中的记录以及与该记录关联的外部文件).我知道如何删除所有记录而不删除外部数据.我不想将图像作为二进制blob插入数据库,因为我经常在文件上使用外部工具.
基本上我的数据库只跟踪文件的名称和目录以及与文件关联的空间数据.
从数据库库中删除记录时,如何从文件系统中删除文件?
我甚至正确地解决了这个问题吗?将图像作为二进制blob插入数据库更常见吗?(复制数据的开销使我难以置信,必须有更好的方法.)
我希望它无关紧要,但我在Linux下使用postgre作为我的SQL数据库.
编辑:我目前的策略是使用一个处理图像删除的shell脚本.在shell脚本期间,它使事务文件删除与图像关联的所有数据库记录,同时将文件的完整路径保存为平面文本文件.如果事务成功,我然后删除平面文件中的图像.这是明智的吗?有没有更好的办法?
如果C源有一个未使用的标签,我认为它(当前)有用的唯一原因是,如果有人将其用作"书签"以轻松找到一段代码.除非有这些原因,为什么不使用标签可能不想被删除有任何技术原因吗?换句话说,是否有可能通过删除它们来破坏编译单元,以便外部编译单元可能以某种方式使用它?
编辑:我修改的具体代码是C89之前,所以历史C行为可能会有所作为.
我想收集"最佳"方法,在一个地方生成所有四种类型间隔的随机数.我厌倦了谷歌搜索这个.搜索结果出现了很多垃圾.甚至相关的结果都是页面或博客,这些页面或博客通常都是错误的,或者讨论过自我指定的专家在某些技术性方面彼此不同意,通常他们的"答案"似乎暴露出他们不了解不同的类型(关闭)间隔开放,半开放.我厌倦了阅读关于在C中为这样一个"简单"问题生成随机数的不良信息.
请告诉我如何生成均匀分布的浮点数.这是我在(a,b),[a,b),(a,b]和[a,b]上的典型方式(使用"long double"作为例子):
long double a=VALUE1,b=VALUE2;
long double x1,x2,x3,x4;
srand((unsigned)time(NULL));
/* x1 will be an element of [a,b] */
x1=((long double)rand()/RAND_MAX)*(b-a) + a;
/* x2 will be an element of [a,b) */
x2=((long double)rand()/((long double)RAND_MAX+1))*(b-a) + a;
/* x3 will be an element of (a,b] */
x3=(((long double)rand()+1)/((long double)RAND_MAX+1))*(b-a) + a;
/* x4 will be an element of (a,b) */
x4=(((long double)rand()+1)/((long double)RAND_MAX+2))*(b-a) + a;
Run Code Online (Sandbox Code Playgroud)
对于单位间隔(0,1),[0,1),(0,1]和[0,1]的特殊情况:
long double x1,x2,x3,x4;
srand((unsigned)time(NULL));
/* x1 will be an element of [0,1] */
x1=((long …Run Code Online (Sandbox Code Playgroud) 我是一个绝对新的GUI程序员,经验很少(除了Java中的一些小应用程序).我正在考虑编写一个需要简单2D图形的小应用程序.我不知道是否应该使用Xlib或cairo来绘制这些图.
与Cairo相比,Xlib的图形组件是否快速?如果使用Xlib编写cairo,那么答案肯定是肯定的,但我不知道是不是.
c ×4
postgresql ×2
2d ×1
32bit-64bit ×1
algorithm ×1
casting ×1
diskspace ×1
ext3 ×1
ext4 ×1
filenames ×1
filesystems ×1
geospatial ×1
inheritance ×1
label ×1
pointers ×1
random ×1
sql ×1
standards ×1
unix ×1
xlib ×1