Questions tagged «c»

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

7
有任何简单的登录Android NDK代码的方法吗?
我正在寻找一种使用Eclipse在Android NDK应用程序中轻松调试C代码的方法。我已经阅读了使用gdb或类似工具调试应用程序的方法,但是我想要的是以某种方式将消息推送到Eclipse的方法。 我正在寻找一种简单的解决方案,就像在C语言中使用打印功能并在DDMS日志或类似工具中看到它一样。有没有人有这样做的经验?


5
矩阵乘法:矩阵大小差异小,时序差异大
我有一个矩阵乘法代码,如下所示: for(i = 0; i < dimension; i++) for(j = 0; j < dimension; j++) for(k = 0; k < dimension; k++) C[dimension*i+j] += A[dimension*i+k] * B[dimension*k+j]; 在此,矩阵的大小由表示dimension。现在,如果矩阵的大小为2000,则运行此代码需要147秒,而如果矩阵的大小为2048,则需要447秒。所以虽然没有区别。的乘积为(2048 * 2048 * 2048)/(2000 * 2000 * 2000)= 1.073,时间差为447/147 =3。有人可以解释为什么会这样吗?我希望它可以线性扩展,但不会发生。我不是在尝试制作最快的矩阵乘法代码,只是在试图理解为什么会这样。 规格:AMD Opteron双核节点(2.2GHz),2G RAM,gcc v 4.5.0 程序编译为 gcc -O3 simple.c 我也在英特尔的icc编译器上运行了此命令,并且看到了类似的结果。 编辑: 正如评论/答案中所建议的那样,我运行的维度为2060的代码需要145秒。 …

13
通过下标获取一个最后一个数组元素的地址:是否符合C ++标准?
我已经看到它多次断言C ++标准不允许以下代码: int array[5]; int *array_begin = &array[0]; int *array_end = &array[5]; 是&array[5]合法的C ++代码,在这种情况下? 如果可能的话,我想参考标准的答案。 知道它是否符合C标准也很有趣。如果不是标准的C ++,为什么要决定将其与array + 5or区别对待&array[4] + 1?

11
“;”的目的是什么?在for循环的末尾?
我发现以下代码: int func_prim (int zahl) { int count; if (zahl < 0) return -1; for (count = 2; zahl % count != 0 && zahl >= count; count++); if (count == zahl) return 1; return 0; } 功能的重点是检查数字是否是质数。 我不明白为什么循环;末尾会出现: v for (count = 2; zahl % count != 0 && …
76 c  for-loop 

10
空隙的大小是多少?
这句话会产生什么? void *p = malloc(sizeof(void)); 编辑:问题的扩展。 如果sizeof(void)在GCC编译器中产生1,则分配1字节的内存,指针p指向该字节,p ++是否会递增为0x2346?假设p为0x2345。我说的是p,而不是* p。

4
错误LNK2005:MSVCRT.lib(MSVCR100.dll)中已定义的xxx C:\ something \ LIBCMT.lib(setlocal.obj)
我正在使用DCMTK库读取Dicom文件(医学图像处理中使用的图像格式。)在编译此DCMTK源代码时遇到问题。DCMTK使用其他一些外部库(zlib,tiff,libpng,libxml2,libiconv)。我知道所有库都应使用相同的代码生成选项来生成。 我已经下载了这些支持库的编译版本,这些支持库是使用“多线程DLL”运行时选项(/ MD)编译的。在DCMTK源代码的每个项目中,我确保运行时选项为“多线程DLL”(/ MD)。但是仍然出现这些错误: Error 238 error LNK2005: ___iob_func already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(_file.obj) dcmp2pgm Error 239 error LNK2005: __lock_file already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(_file.obj) dcmp2pgm Error 240 error LNK2005: __unlock_file already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(_file.obj) dcmp2pgm Error 241 error LNK2005: __initterm_e already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(crt0dat.obj) dcmp2pgm Error 242 …

7
在哪里可以和不能在C中声明新变量?
我(可能是从老师那里)听说,应该在程序/函数之上声明所有变量,并且在声明中声明新变量可能会引起问题。 但是后来我在阅读K&R时碰到了这句话:“变量的声明(包括初始化)可能会在左括号后面加上任何复合语句,而不仅仅是开始一个函数的语句”。他举了一个例子: if (n > 0){ int i; for (i=0;i<n;i++) ... } 我对这个概念玩了一点,它甚至适用于数组。例如: int main(){ int x = 0 ; while (x<10){ if (x>5){ int y[x]; y[0] = 10; printf("%d %d\n",y[0],y[4]); } x++; } } 那么,到底什么时候不允许我声明变量?例如,如果我的变量声明在右括号之后不正确怎么办?像这儿: int main(){ int x = 10; x++; printf("%d\n",x); int z = 6; printf("%d\n",z); } …
76 c  declaration 

2
为什么%d代表整数?
我知道这听起来并不奏效,但是我正在寻找一种方法来记住所有printf呼叫的格式代码。%s,%p,%f都是显而易见的,但我不明白的地方%d,从说到。是%i已经采取别的东西吗?
76 c  formatting  printf 

11
使用堆内存(malloc / new)是否会创建不确定的程序?
几个月前,我开始用C语言开发用于实时系统的软件,用于空间应用程序以及具有C ++的微控制器。在这样的系统中有一个经验法则:永远不要创建堆对象(因此不要创建malloc / new),因为它会使程序变得不确定。当人们告诉我时,我无法验证这句话的正确性。那么,这是正确的说法吗? 对我来说,困惑是,据我所知,确定性意味着两次运行程序将导致精确,相同的执行路径。据我了解,这是多线程系统的一个问题,因为多次运行相同的程序可能会使不同的线程每次以不同的顺序运行。


11
为什么strncpy不为null终止?
strncpy()据说可以防止缓冲区溢出。但是,如果它防止了不带null终止的溢出,则很可能随后的字符串操作都会溢出。因此,为了防止这种情况,我发现自己正在做: strncpy( dest, src, LEN ); dest[LEN - 1] = '\0'; man strncpy 给出: 该strncpy()功能类似,但所复制的n字节数不超过个字节src。因此,如果存在第一间没有空字节n的字节src,则结果将不会被空终止。 在没有null终止的情况下,看起来像是无辜的事情如下: printf( "FOO: %s\n", dest ); ...可能会崩溃。 是否有更好,更安全的替代方法strncpy()?
76 c  strncpy 


14
在C ++中使用最小和最大函数
从C ++,是min和max优选超过fmin和fmax?为了比较两个整数,它们是否提供基本相同的功能? 您倾向于使用这些功能之一还是倾向于编写自己的功能(也许是为了提高效率,可移植性,灵活性等)? 笔记: C ++标准模板库(STL)在标准C ++算法标头中声明min和max函数。 C标准(C99)在标准C math.h标头中提供fminandfmax函数。 提前致谢!
76 c++  c  max  min 

5
函数声明与原型的替代(K&R)C语法
C使用'K&R'样式函数声明,此语法有什么用? int func (p, p2) void* p; int p2; { return 0; } 我能够在Visual Studios 2010beta中编写此代码 // yes, the arguments are flipped void f() { void* v = 0; func(5, v); } 我不明白 这种语法有什么意义?我可以写: int func (p, p2) int p2; { return 0; } // and write int func (p, …

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.