Questions tagged «c»

C是用于系统编程(OS和嵌入式),库,游戏和跨平台的通用编程语言。该标记应与ISO 9899标准(除非另有说明,最新版本9899:2018中定义的有关C语言的一般问题)一起使用-还要使用c89,c99,c11等标记特定于版本的请求。C与C ++截然不同,在没有合理理由的情况下,不应将其与C ++标记结合使用。

13
启动失败。找不到二进制文件。Eclipse Helios上的CDT
我在Ubuntu 10.04上使用Eclipse Helios,并且尝试在其上安装CDT插件。我从这里下载它这里。 然后我转到“安装新软件”并选择zip文件(我没有解压缩它,只需选择zip文件)。好的,它可以安装,一切正常,它显示了可选功能,等等等等。 然后创建一个新的HelloWorld项目。当我尝试运行它时,它显示一个错误并说: 启动失败。找不到二进制文件。 谁能解释我该如何解决? 谢谢。


7
是否可以告诉分支预测变量跟随分支的可能性有多大?
为了清楚起见,我在这里不打算进行任何形式的可移植性,因此任何将我与特定机器绑定在一起的解决方案都可以。 基本上,我有一条if语句,它将在99%的时间中将其评估为true,并试图提高性能的最后一个时钟,我是否可以发出某种编译器命令(使用GCC 4.1.2和x86 ISA,如果重要)告诉分支预测器它应该为该分支缓存?

13
如何将单元测试引入大型的(C / C ++)代码库中?
我们有一个大型的,用C语言编写的多平台应用程序(使用的C ++数量很少,但数量在不断增长)。随着多年来的发展,它具有许多您希望在大型C / C ++应用程序中使用的功能: #ifdef 地狱 大文件使得难以隔离可测试代码 功能太复杂而无法轻松测试 由于此代码是针对嵌入式设备的,因此在实际目标上运行它会产生大量开销。因此,我们希望在本地系统上快速完成更多的开发和测试。但是,我们希望避免采用经典策略“将文件复制/粘贴到系统上的.c文件中,修复错误,然后复制/粘贴回”。如果开发人员要麻烦这样做,我们希望以后能够重新创建相同的测试,并以自动化的方式运行。 这是我们的问题:为了将代码重构为更具模块化,我们需要使其更具可测试性。但是,为了引入自动化的单元测试,我们需要使其更具模块化。 一个问题是,由于我们的文件太大,因此我们可能在文件中包含一个函数,该函数在同一文件中调用一个函数,因此需要对它进行存根以进行良好的单元测试。随着我们的代码变得更加模块化,似乎这将不再是问题,但这还有很长的路要走。 我们考虑做的一件事是用注释标记“已知是可测试的”源代码。然后,我们可以编写脚本扫描源文件以获取可测试的代码,将其编译为单独的文件,然后将其与单元测试链接。我们可以在修复缺陷和添加更多功能时慢慢介绍单元测试。 但是,令人担忧的是,维护此方案(以及所有必需的桩函数)将变得很麻烦,并且开发人员将停止维护单元测试。因此,另一种方法是使用一种工具,该工具会自动为所有代码生成存根,并将其与文件链接。(我们发现唯一可以执行此操作的工具是昂贵的商业产品),但是这种方法似乎要求我们所有的代码在开始之前都必须更加模块化,因为只能进行外部调用。 就个人而言,我希望开发人员考虑其外部依赖关系并智能地编写自己的存根。但是,如果将所有依赖项存根为一个严重过度增长的10,000行文件,可能会不堪重负。可能很难说服开发人员他们需要维护所有外部依赖项的存根,但这是正确的方法吗?(我听到的另一个论点是子系统的维护者应维护其子系统的存根。但是我想知道是否“强迫”开发人员编写自己的存根会导致更好的单元测试?) 的#ifdefs,当然,再添全尺寸的问题。 我们已经研究了几种基于C / C ++的单元测试框架,并且有很多看起来不错的选项。但是我们还没有发现任何简化从“没有单元测试的代码圈”到“可单元测试的代码”的过渡的方法。 因此,这是我对遇到过此问题的其他人的疑问: 一个好的起点是什么?我们是朝着正确的方向前进,还是缺少明显的东西? 哪些工具可能有助于过渡?(最好是免费/开源,因为我们目前的预算大约为“零”) 注意,我们的构建环境是基于Linux / UNIX的,因此我们不能使用任何仅Windows的工具。
74 c++  c  unit-testing  unix  legacy 

5
什么是找到size_t最大值的可移植方法?
我想知道我的程序正在运行的系统上size_t的最大值。我的第一个本能是使用负1,如下所示: size_t max_size = (size_t)-1; 但是我猜想有更好的方法,或者在某个地方定义一个常量。
74 c  size-t 

18
检查指针是否分配了内存
我们可以检查传递给函数的指针是否在C中分配了内存吗? 我在C中编写了自己的函数,该函数接受字符指针-buf [指向缓冲区的指针]和大小-buf_siz [缓冲区大小]。实际上,在调用此函数之前,用户必须创建一个缓冲区并为其分配buf_siz的内存。 由于用户可能会忘记做内存分配,而只是将指针传递给我的函数,因此我想检查一下。所以有什么办法可以检查我的函数,以查看传递的指针是否确实分配了buf_siz的内存量。 EDIT1:似乎没有标准库可以检查它..但是有没有脏东西可以检查它.. ?? EDIT2:我确实知道我的函数将由优秀的C程序员使用...但是我想知道是否可以检查..如果我们愿意听.. 结论:因此,无法检查某个指针是否在函数中分配了内存
74 c  pointers 

5
strcpy与strdup
我读到的strcpy是复制字符串,并strdup返回一个指向新字符串的指针以复制该字符串。 您能否解释一下您喜欢使用strcpy哪种情况以及您喜欢使用哪种情况strdup?
74 c  strcpy  strdup 

5
静态与全局
如果我有一个如下所示的C文件,i和之间有什么区别j? #include <stdio.h> #include <stdlib.h> static int i; int j; int main () { //Some implementation }
74 c  static  global 

11
C / C ++中的固定长度数据类型
我听说诸如数据类型的大小int可能因平台而异。 我的第一个问题是:有人可以举个例子吗,当程序假设anint是4个字节,但是在另一个平台上却是2个字节时,出了什么问题? 我遇到的另一个问题是相关的。我知道人们可以通过某些方法来解决此问题typedefs,例如,您拥有像u8,,-这样的变量,无论使用什么平台u16,u32该变量都保证是8bit,16bit,32bits-我的问题是,通常如何实现?(我不是指stdint库中的类型-我是很好奇的手动工具,无论平台如何,一个类型如何总是说32位?)
74 c++  c 


7
如何编译由GCC生成的asm?
我在玩一些汇编代码,有些事情困扰着我。 我编译这个: #include <stdio.h> int main(int argc, char** argv){ printf("Hello World\n"); return 0; } 与gcc file.c -S -o file.S此产生一个很好的小片的汇编代码: .cstring LC0: .ascii "Hello World\0" .text .globl _main _main: LFB3: pushq %rbp LCFI0: movq %rsp, %rbp LCFI1: subq $16, %rsp LCFI2: movl %edi, -4(%rbp) movq %rsi, -16(%rbp) leaq LC0(%rip), %rdi call …



3
数字文字的ULL后缀
我遇到过这样的一些代码: line += addr & 0x3fULL; 显然,“ U”和“ L”不是十六进制数字。我猜测十六进制数字文字末尾的“ ULL”表示“ Unsigned Long Long”-我正确吗?(这种事情很难用谷歌搜索)如果是的话,那么这是数字上的某种后缀修饰符吗?
74 c++  c 

11
用括号括住C中的返回值
在ANSI C代码中,经常可以看到括号将单个返回值括起来。 像这样:- int foo(int x) { if (x) return (-1); else return (0); } 在这种情况下,为什么要在返回值周围使用()?有任何想法吗?我看不出有什么理由。
74 c  syntax  coding-style 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.