Questions tagged «c»

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


9
如何在z / OS上的C ++中使用C套接字API
我有越来越的C套接字API到正常工作的问题C++上z/OS。 尽管我包括在内sys/socket.h,但仍然收到编译时错误,告诉我这AF_INET是未定义的。 我是否遗漏了一些明显的东西,或者这与事实z/OS使我的问题变得更加复杂有关? 更新:经过进一步调查,我发现有一个#ifdef我在打。z/OS除非我定义要使用的套接字的“类型”,否则显然是不高兴的: #define _OE_SOCKETS 现在,我个人不知道这_OE_SOCKETS实际上是做什么的,因此,如果有任何z/OS套接字程序员(你们所有人中的三个)都在这里,也许您可​​以给我一个总结一下这一切的工作原理? 测试应用 #include <sys/socket.h> int main() { return AF_INET; } 编译/链接输出: cxx -Wc,xplink -Wl,xplink -o inet_test inet.C "./inet.C", line 5.16: CCN5274 (S) The name lookup for "AF_INET" did not find a declaration. CCN0797(I) Compilation failed for file ./inet.C. Object file not created. 检查sys / …
158 c++  c  sockets  mainframe  zos 

24
C的有用GCC标志
除了setting -Wall和setting之外-std=XXX,还有哪些真正有用的,但鲜为人知的编译器标志可用于C语言中? 我对任何其他警告和/或在某些情况下将警告转换为错误以最大程度地减少任何意外的类型不匹配特别感兴趣。
157 c  gcc  compiler-flags 

8
什么是C运行时库?
C运行时库实际上是什么,它的作用是什么?我一直在搜索,就像恶魔一样,但是没有找到比微软更好的东西:“微软运行时库提供了用于Microsoft Windows操作系统编程的例程。这些例程可自动执行许多常规编程任务,而这些任务并非由Microsoft提供C和C ++语言。” 好,我明白了,但是例如,里面有什么libcmt.lib?它有什么作用?我认为C标准库是C编译器的一部分。那么libcmt.libWindows的C标准库功能实现是否可以在win32下工作?
157 c  runtime 

11
memcpy()vs memmove()
我想明白之间的差别memcpy(),并memmove()和我有阅读的文本memcpy(),而没有照顾重叠源和目的地memmove()一样。 但是,当我在重叠的存储块上执行这两个功能时,它们都给出相同的结果。例如,在memmove()帮助页面上采用以下MSDN示例:- 有没有更好的例子来了解它的缺点memcpy以及如何memmove解决? // crt_memcpy.c // Illustrate overlapping copy: memmove always handles it correctly; memcpy may handle // it correctly. #include <memory.h> #include <string.h> #include <stdio.h> char str1[7] = "aabbcc"; int main( void ) { printf( "The string: %s\n", str1 ); memcpy( str1 + 2, str1, 4 ); printf( "New …
157 c  memcpy  memmove 

22
C语言中的面向对象
什么是一组能使C语言实现某种丑陋(但可用)的面向对象的漂亮的预处理程序黑客(与ANSI C89 / ISO C90兼容)? 我熟悉几种不同的面向对象语言,因此请不要回答“学习C ++!”之类的答案。我已经阅读了“ 使用ANSI C进行面向对象的编程 ”(当心:PDF格式)和其他一些有趣的解决方案,但是我对您的最感兴趣:-)! 另请参见您可以用C编写面向对象的代码吗?
157 c  oop  object 

10
在C中通过值传递结构而不是传递指针是否有不利之处?
在C中通过值传递结构而不是传递指针是否有不利之处? 如果结构很大,显然有复制大量数据的性能方面,但是对于较小的结构,它基本上应该与将多个值传递给函数相同。 当用作返回值时,它甚至可能更有趣。C仅具有从函数返回的单个值,但是您经常需要多个。因此,一个简单的解决方案是将它们放在结构中并返回该结构。 是否有任何理由支持或反对? 由于可能不是所有人都知道我在这里说的是什么,所以我举一个简单的例子。 如果您使用C语言进行编程,则迟早会开始编写如下所示的函数: void examine_data(const char *ptr, size_t len) { ... } char *p = ...; size_t l = ...; examine_data(p, l); 这不是问题。唯一的问题是,您必须与您的同事达成共识,在该同事中,参数应为顺序,以便在所有功能中使用相同的约定。 但是,当您想返回相同类型的信息时会发生什么呢?您通常会得到以下内容: char *get_data(size_t *len); { ... *len = ...datalen...; return ...data...; } size_t len; char *p = get_data(&len); 这可以正常工作,但存在更多问题。返回值是一个返回值,除了在此实现中不是。从上面无法得知,不允许函数get_data查看len指向什么。没有什么可以使编译器检查通过该指针实际返回的值。因此,下个月,当其他人修改了代码却没有正确理解它(因为他没有阅读文档?)时,它就崩溃了,而没有任何人注意,或者它开始随机崩溃。 所以,我提出的解决方案是简单的结构 struct blob { char …

9
为什么要在memset上使用bzero?
在上学期的系统编程课程中,我们必须用C语言实现一个基本的客户端/服务器。在初始化结构(如sock_addr_in或char缓冲区(我们用来在客户端和服务器之间来回发送数据)时,指示我们仅使用bzero而不memset初始化它们。他从不解释原因,我很好奇这是否有正当理由吗? 我在这里看到:http://fdiv.net/2009/01/14/memset-vs-bzero-ultimate-showdown这bzero是更有效的,由于一个只能将要归零记忆的事实,所以也没有必须做memset可能做的任何其他检查。不过,这似乎仍不一定是绝对不memset用于清零内存的原因。 bzero被视为已弃用,而且不是标准C函数。根据该手册,由于这个原因,它memset是首选bzero。那么,为什么还要使用bzero完memset呢?仅仅是为了提高效率,还是更多?同样,memset超过的收益有什么好处bzero,使其成为较新程序的事实上的首选选择?

23
释放后将变量设置为NULL
在我公司中,有一条编码规则说,释放所有内存后,将变量重置为NULL。例如 ... void some_func () { int *nPtr; nPtr = malloc (100); free (nPtr); nPtr = NULL; return; } 我觉得,在如上所示代码的情况下,设置为NULL没有任何意义。还是我错过了什么? 如果在这种情况下没有意义,我将与“质量团队”一起解决,以删除此编码规则。请指教。


5
移位是否取决于字节序?
假设我有'numb'=1025 [00000000 00000000 00000100 00000001]代表的数字: 在Little-Endian机器上: 00000001 00000100 00000000 00000000 在Big-Endian机器上: 00000000 00000000 00000100 00000001 现在,如果我在10位上应用左移(即:numb << = 10),则应该具有: [A]在Little-Endian机器上: 正如我在GDB中注意到的那样,Little Endian进行了3个步骤的左移:[我展示了'3'个步骤,只是为了更好地理解处理过程] 请不要 在Big-Endian Convention中: 00000000 00000000 00000100 00000001 应用左移: 00000000 00010000 00000100 00000000 在Little-Endian中再次表示结果: 00000000 00000100 00010000 00000000 [B]。在Big-Endian机器上: 00000000 00010000 00000100 00000000 我的问题是: 如果我直接在Little Endian Convention上应用Left Shift,它应该给出: numb: …
156 c  endianness 

5
内置函数'malloc'的不兼容隐式声明
我收到此错误: 警告:内置函数“ malloc”的隐式声明不兼容 我正在尝试这样做: fileinfo_list* tempList = malloc(sizeof(fileinfo_list)); 仅供参考,手头使用的结构是: typedef struct { fileinfo** filedata; size_t nFiles; size_t size; size_t fileblock; } fileinfo_list; 我认为自己所做的没有任何问题。我只是创建一个tempList1 x的大小fileinfo_list。
155 c  struct  malloc 

21
在C中使用分隔符分割字符串
如何使用C编程语言编写一个函数,以分隔符并返回带有分隔符的字符串数组? char* str = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC"; str_split(str,',');
155 c  string  split 

7
浮点数与双精度
代码 float x = 3.141592653589793238; double z = 3.141592653589793238; printf("x=%f\n", x); printf("z=%f\n", z); printf("x=%20.18f\n", x); printf("z=%20.18f\n", z); 会给你输出 x=3.141593 z=3.141593 x=3.141592741012573242 z=3.141592653589793116 输出的第三行741012573242是垃圾,第四行116是垃圾。双打是否总是有16个有效数字,浮子总是有7个有效数字?为什么双打没有14位有效数字?
155 c  floating-point 

9
我的变量存储在内存中的什么位置?
通过考虑将内存分为四个部分:数据,堆,堆栈和代码,全局变量,静态变量,常量数据类型,局部变量(在函数中定义和声明),变量(在主函数中),指针在哪里,并动态分配空间(使用malloc和calloc)存储在内存中? 我认为它们的分配如下: 全局变量------->数据 静态变量------->数据 常量数据类型----->代码 局部变量(在函数中声明和定义)-------->堆栈 在主函数----->堆中声明和定义的变量 指针(例如char *arr,int *arr)------->堆 动态分配的空间(使用malloc和calloc)-------->堆栈 我仅从C角度指这些变量。 如果我错了,请纠正我,因为我是C新手。

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.