Questions tagged «c»

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

9
C指针:指向固定大小的数组
这个问题出现在C语言专家那里: 在C中,可以如下声明一个指针: char (* p)[10]; ..基本上表明该指针指向10个字符的数组。像这样声明一个指针的整洁之处在于,如果尝试为p分配一个大小不同的数组的指针,则会出现编译时错误。如果您尝试将简单的char指针的值分配给p,也会给您带来编译时错误。我在gcc上尝试过,似乎可以在ANSI,C89和C99上使用。 在我看来,像这样声明一个指针将非常有用-特别是在将指针传递给函数时。通常,人们会这样写这样的函数原型: void foo(char * p, int plen); 如果期望使用特定大小的缓冲区,则只需测试plen的值。但是,不能保证将p传递给您的人确实会在该缓冲区中为您提供有效的内存位置。您必须相信调用此函数的人在做正确的事情。另一方面: void foo(char (*p)[10]); ..将强制调用方为您提供指定大小的缓冲区。 这似乎很有用,但我从未在任何遇到过的代码中看到过像这样声明过的指针。 我的问题是:人们为什么不声明这样的指针有什么理由?我没有看到明显的陷阱吗?
118 c  pointers  size 

6
C char数组初始化
我不确定初始化后通过以下方式在char数组中会有什么。 1. char buf[10] = ""; 2. char buf[10] = " "; 3。char buf[10] = "a"; 对于情况2,我认为buf[0]应该是' ',buf[1]应该是'\0',并且从buf[2]到buf[9]将是随机内容。对于情况3,我认为buf[0]应该是'a',buf[1]应该是'\ 0',并且从buf[2]到buf[9]将是随机内容。 那是对的吗? 对于情况1,会发生什么buf?buf[0] == '\0'从buf[1]到buf[9]将会是随机内容?

4
#include在.h或.c / .cpp中?
使用C或C ++进行编码时,我应该在哪里#include? callback.h: #ifndef _CALLBACK_H_ #define _CALLBACK_H_ #include <sndfile.h> #include "main.h" void on_button_apply_clicked(GtkButton* button, struct user_data_s* data); void on_button_cancel_clicked(GtkButton* button, struct user_data_s* data); #endif callback.c: #include <stdlib.h> #include <math.h> #include "config.h" #include "callback.h" #include "play.h" void on_button_apply_clicked(GtkButton* button, struct user_data_s* data) { gint page; page = gtk_notebook_get_current_page(GTK_NOTEBOOK(data->notebook)); ... 应该全部包含在.h或.c / …
118 c++  c 

14
在学习C ++之前应该学习C吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我今天在开放日参观了大学CS系,在实验室参观中我们坐下来参加了一些本科生的期末项目。一个特别好-一种FPS小行星游戏。我决定看一下src目录,以发现它是用C ++完成的(其他大多数项目都是Java 3D应用程序)。 我以前没有做过C,但是之前已经看过一些C代码。从我在该游戏的.cpp代码中看到的看,它看起来并没有太大不同。 我对学习C或C ++感兴趣,但稍后可能会学习其他。是否有任何优势,我一个学习之前,其他和如果是的话,哪一个?
117 c++  c 


12
“常量静态”在C和C ++中是什么意思?
const static int foo = 42; 我在StackOverflow上的某些代码中看到了这一点,但无法弄清楚它的作用。然后我在其他论坛上看到了一些困惑的答案。我最好的猜测是,它在C语言中用于隐藏foo其他模块中的常量。这样对吗?如果是这样,为什么有人会在可以制作它的C ++上下文中使用它private呢?
117 c++  c 

5
错误:使用了Libtool库,但未定义“ LIBTOOL”
我正在尝试automakeOrientDb C ++库,但出现一些错误。 Makefile.am:10: error: Libtool library used but 'LIBTOOL' is undefined Makefile.am:10: The usual way to define 'LIBTOOL' is to add 'LT_INIT' Makefile.am:10: to 'configure.ac' and run 'aclocal' and 'autoconf' again. Makefile.am:10: If 'LT_INIT' is in 'configure.ac', make sure Makefile.am:10: its definition is in aclocal's search path. https://github.com/tglman/orientdb-c https://github.com/tglman/orientdb-c/wiki/安装 …
117 c  linux  autotools  orientdb 

11
异常代码“ EXC_I386_GPFLT”是什么意思?
异常代码是什么意思EXC_I386_GPFLT? 它的含义是否随情况而变化? 在这种情况下,我指的是EXC_BAD_ACCESS带有异常代码的异常类型EXC_I386_GPFLT 该程序是用Xcode 5.0.1开发的,用于处理cblas_zgemm()BLAS库。(嗯,我想这没关系... 非常感谢你!
117 c++  c  exc-bad-access 

5
如何在C语言中的Linux中使用共享内存
我的一个项目有一个问题。 我一直在尝试找到一个有据可查的使用共享内存的例子,fork()但是没有成功。 基本上情况是,当用户启动程序时,我需要在共享内存中存储两个值:current_path(它是一个char *)和file_name(它也是char *)。 根据命令参数,将启动一个新进程fork(),该进程需要读取和修改共享内存中存储的current_path变量,而file_name变量为只读。 是否有关于共享内存的很好的教程,并带有示例代码(如果可能),您可以将其引导至?
117 c  linux  fork  shared-memory 


30
与C语言相比,C ++的局限性是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 6年前关闭。 改善这个问题 以下是C ++的好处 C ++提供了他们所要求的特定功能 他们的C编译器几乎可以肯定是C ++编译器,因此不会产生软件成本问题 C ++和C一样可移植 C ++代码可以和C一样高效(或多或少) 是否有任何具体的原因和特定的情况,即必须在C ++上使用C? 引用此问题:C语言中的泛型库 不能重复,因为这个问题是在询问语言限制,而不是在/不应该学习一种语言。 Peter Kirkham的帖子对我来说是最有用的信息,特别是关于我没有考虑过的C99问题,因此我接受了。感谢所有其他参加者。
116 c++  c 

30
编码实践,使编译器/优化器可以制作更快的程序
许多年前,C编译器并不是特别聪明。作为解决方法,K&R发明了register关键字,以向编译器提示,将这个变量保留在内部寄存器中可能是一个好主意。他们还让第三级操作员帮助生成更好的代码。 随着时间的流逝,编译器逐渐成熟。他们变得非常聪明,因为他们的流程分析使他们能够比您可能做的更好地决定要保存在寄存器中的值。register关键字变得不重要。 由于别名问题,对于某些类型的操作,FORTRAN可能比C更快。从理论上讲,经过仔细的编码,可以绕过这一限制,以使优化器生成更快的代码。 有哪些可用的编码实践可以使编译器/优化器生成更快的代码? 确定您使用的平台和编译器,将不胜感激。 为什么该技术似乎有效? 鼓励使用示例代码。 这是一个相关的问题 [编辑] 此问题与概要分析和优化的总体过程无关。假设程序已正确编写,经过全面优化编译,经过测试并投入生产。您的代码中可能存在一些禁止优化器尽其所能的构造。您如何做才能重构以消除这些禁止并允许优化器生成更快的代码? [编辑] 偏移相关链接

11
如何修复“在C99模式之外使用的for循环初始声明” GCC错误?
我正在尝试解决3n + 1问题,并且有一个for看起来像这样的循环: for(int i = low; i <= high; ++i) { res = runalg(i); if (res > highestres) { highestres = res; } } 不幸的是,当我尝试使用GCC进行编译时,出现了此错误: 3np1.c:15:错误:“ for”循环初始声明在C99模式之外使用 我不知道什么是C99模式。有任何想法吗?
116 c  gcc  for-loop 


3
为什么main在这里不返回0?
我刚读 ISO / IEC 9899:201x委员会草案-2011年4月12日 我在5.1.2.2.3中发现程序终止 ..reaching the } that terminates the main function returns a value of 0. 这意味着,如果您未在中指定任何return语句main(),并且程序成功运行,则main的右括号}将返回0。 但是在下面的代码中,我没有指定任何return语句,但是它没有返回0 #include<stdio.h> int sum(int a,int b) { return (a + b); } int main() { int a=10; int b=5; int ans; ans=sum(a,b); printf("sum is %d",ans); } 编译 gcc test.c ./a.out …
116 c  linux  return  main 

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.