Questions tagged «c»

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

11
核心转储,但核心文件不在当前目录中?
在运行C程序时,它显示“((核心转储)”),但是在当前路径下看不到任何文件。 我已经设置并验证了ulimit: ulimit -c unlimited ulimit -a 我也试图找到一个名为“ core”的文件,但是没有得到core dumped文件? 任何帮助,我的核心文件在哪里?
276 c  linux  coredump 


18
在C中“注册”关键字?
register关键字用C语言做什么?我已经读过它用于优化,但是在任何标准中都没有明确定义。它仍然相关,如果有,您什么时候使用它?
272 c  memory  keyword 

4
共享库(.so),静态库(.a)和DLL(.so)之间的区别?
我参与了有关Linux库的一些辩论,并想确认一些事情。 根据我的理解(如果我做错了,请纠正我,稍后我将编辑我的文章)在构建应用程序时有两种使用库的方法: 静态库(.a文件):在链接时,会将整个库的副本放入最终应用程序中,以便调用方应用程序始终可以使用库中的功能 共享对象(.so文件):在链接时,仅通过相应的标头(.h)文件针对其API对对象进行了验证。该库直到需要运行时才真正使用。 静态库的明显优点是它们允许整个应用程序独立运行,而动态库的优点是可以替换“ .so”文件(即:由于安全原因需要更新)错误),而无需重新编译基本应用程序。 我听说有人对共享库和动态链接库(DLL)进行了区分,即使它们都是“ .so”文件。在Linux或任何其他POSIX兼容操作系统(即MINIX,UNIX,QNX等)上进行C / C ++开发时,共享库和DLL之间是否有区别?有人告诉我(到目前为止)一个关键的区别是共享对象仅在运行时使用,而DLL的共享必须首先在应用程序中使用dlopen()调用来打开。 最后,我还听到一些开发人员提到“共享档案”,据我了解,共享档案本身也是静态库,但从未被应用程序直接使用。相反,其他静态库将链接到“共享档案”,以将某些(但不是全部)功能/资源从共享档案中拉到正在构建的静态库中。 预先感谢大家的帮助。 更新资料 在向我提供这些术语的上下文中,必须学习Linux的一组Windows开发人员实际上使用了错误的术语。我试图纠正它们,但是(不正确的)语言规范卡住了。 共享库:程序启动时自动链接到程序的库,并且作为独立文件存在。该库在编译时包含在链接列表中(即:LDOPTS+=-lmylib对于名为的库文件mylib.so)。该库必须在编译时以及应用程序启动时存在。 静态库:一个在构建时就合并到实际程序本身的库,用于一个(较大)应用程序,其中包含应用程序代码和在构建程序时自动链接到程序中的库代码,而最终的二进制文件则同时包含这两个程序主程序和库本身作为单个独立的二进制文件存在。该库在编译时包含在链接列表中(即:LDOPTS+=-lmylib对于名为mylib.a的库文件)。该库必须在编译时存在。 DLL:本质上与共享库相同,但不是在编译时包含在链接列表中,而是通过dlopen()/ dlsym()命令加载该库,因此该库无需在构建时就存在,即可进行程序编译。同样,该库不需要在应用程序启动或编译时出现(必需),因为仅在进行dlopen/ dlsym调用时才需要。 共享存档:本质上与静态库相同,但是使用“导出共享”和“ -fPIC”标志进行编译。该库在编译时包含在链接列表中(即:LDOPTS+=-lmylibS对于名为的库文件mylibS.a)。两者之间的区别是,如果共享库或DLL希望将共享归档文件静态链接到其自己的代码,并且能够使共享库中的函数可用于其他程序,而不仅仅是使用它们,则需要使用此附加标志。 DLL内部。当有人为您提供静态库并且您希望将其重新打包为SO时,这很有用。该库必须在编译时存在。 附加更新 “ DLL”和“ shared library” 之间的区别只是我当时工作的公司中的一种(懒惰,不准确的)口语(Windows开发人员被迫转移到Linux开发,并且这个术语陷入了僵局),并遵循上述说明。 另外,在S“共享档案”的情况下,库名后的尾随“ ”文字只是该公司的惯例,而不是整个行业。
272 c++  c  linux  dll  linker 

13
如何在C中定义枚举类型(枚举)?
我不确定使用C枚举的正确语法是什么。我有以下代码: enum {RANDOM, IMMEDIATE, SEARCH} strategy; strategy = IMMEDIATE; 但这无法编译,并出现以下错误: error: conflicting types for ‘strategy’ error: previous declaration of ‘strategy’ was here 我究竟做错了什么?
272 c  enums 



23
如何获取程序正在运行的目录?
是否有平台无关和文件系统无关的方法来获取使用C / C ++从中运行程序的目录的完整路径?不要与当前工作目录混淆。(除非是标准库,例如clib或STL,否则请不要建议它们。) (如果没有与平台/文件系统无关的方法,那么也欢迎在Windows和Linux中适用于特定文件系统的建议。)
269 c++  c  working-directory 

30
如何避免“如果”连锁?
假设我有这个伪代码: bool conditionA = executeStepA(); if (conditionA){ bool conditionB = executeStepB(); if (conditionB){ bool conditionC = executeStepC(); if (conditionC){ ... } } } executeThisFunctionInAnyCase(); executeStepX仅当前一个成功时,才应执行功能。无论如何,executeThisFunctionInAnyCase应在最后调用该函数。我是编程的新手,因此对一个基本问题感到抱歉:是否有一种方法(例如,在C / C ++中)避免长if链产生这种“代码金字塔”,而以代码易读性为代价? 我知道,如果我们可以跳过executeThisFunctionInAnyCase函数调用,则代码可以简化为: bool conditionA = executeStepA(); if (!conditionA) return; bool conditionB = executeStepB(); if (!conditionB) return; bool conditionC = executeStepC(); if (!conditionC) return; …

8
打开文件实际上有什么作用?
在所有编程语言(至少我使用过)中,必须先打开文件才能读取或写入文件。 但是这个打开操作实际上是做什么的? 除了“打开文件以供读取/写入”外,典型功能的手册页实际上没有告诉您任何其他信息: http://www.cplusplus.com/reference/cstdio/fopen/ https://docs.python.org/3/library/functions.html#open 显然,通过使用该函数,您可以知道它涉及创建某种有助于访问文件的对象。 另一种表达方式是,如果我要实现一个open功能,那么在Linux上它将需要做什么?
266 c  linux 


3
为什么C中的箭头(->)运算符存在?
点(.)运算符用于访问结构的成员,而->C语言中的箭头运算符()用于访问所讨论的指针引用的结构的成员。 指针本身没有任何可通过点运算符访问的成员(实际上,它只是一个数字,描述了虚拟内存中的位置,因此它没有任何成员)。因此,如果我们将点运算符定义为在指针上使用时自动取消引用该指针(编译器在编译时知道的信息afaik),则将不会有歧义。 那么,为什么语言创建者决定通过添加此看似不必要的运算符来使事情变得更复杂?重大的设计决定是什么?
264 c  pointers  dereference 

14
如何在C中创建字符串数组?
我正在尝试在C中创建字符串数组。如果使用此代码: char (*a[2])[14]; a[0]="blah"; a[1]="hmm"; gcc给我“警告:来自不兼容指针类型的赋值”。正确的方法是什么? 编辑:我很好奇为什么这应该给编译器警告,因为如果我这样做printf(a[1]);,它将正确打印“ hmm”。
263 c  arrays  string 

10
C / C ++中整数除法的快速上限
给定整数值x和y,C和C ++都将商返回q = x/y浮点等效项的下限。我对返回上限的方法感兴趣。例如ceil(10/5)=2和ceil(11/5)=3。 显而易见的方法包括: q = x / y; if (q * y < x) ++q; 这需要额外的比较和乘法。我见过的(实际上使用过的)其他方法都涉及将as float或as强制转换double。有没有更直接的方法来避免额外的乘法(或第二除法)和分支,并且还避免将其转换为浮点数?
262 c++  c  algorithm  math 


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.