Questions tagged «c»

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

1
函数的数组参数(例如“ char s [static 10]”)中的static关键字的目的是什么?
浏览一些源代码时,我遇到了一个类似这样的函数: void someFunction(char someArray[static 100]) { // do something cool here } 经过一些实验,似乎也可能出现其他限定词: void someFunction(char someArray[const]) { // do something cool here } 似乎仅[ ]在将数组声明为函数的参数时才允许使用限定符。这些是做什么的?为什么功能参数不同?
144 c  arrays  parameters  static 

6
在else语句中,GCC的__builtin_expect有什么优势?
我碰到了一个#define他们用的__builtin_expect。 该文档说: 内置功能: long __builtin_expect (long exp, long c) 您可以__builtin_expect用来向编译器提供分支预测信息。通常,您应该更喜欢为此(-fprofile-arcs)使用实际的配置文件反馈,因为众所周知,程序员在预测其程序的实际执行效果方面很差。但是,在某些应用程序中很难收集此数据。 返回值是的值exp,应为整数表达式。内置的语义是预期的 exp == c。例如: if (__builtin_expect (x, 0)) foo (); 表示我们不期望调用foo,因为我们期望x为零。 那么为什么不直接使用: if (x) foo (); 而不是复杂的语法__builtin_expect?
144 c  linux  gcc  built-in 

6
我们可以在变量名中写注释吗?
int main() { i/*nt*/a = 10; return 0; } 如果我有上面的代码并且想要计算令牌,那么它是14还是13个令牌? 在变量名内写注释是否有效?你可以假设int i,int a,int ia是全局定义。


9
信号和信号有什么区别?
我将要在此处的应用程序中添加一个额外的信号处理程序,并且我注意到作者曾经用来sigaction()设置其他信号处理程序。我正要使用signal()。要遵循约定,我应该使用,sigaction()但是如果我是从头开始编写的,应该选择哪个?
143 c  signals  posix 

2
-pthread标志在编译时的意义
在各种多线程C和C ++项目中,我已经看到该-pthread标志同时应用于编译和链接阶段,而其他人则根本不使用它,而只是-lpthread转到链接阶段。 有没有编译和链接-pthread标志的危险-即-pthread实际上是做什么的?我主要对Linux平台感兴趣。
143 c++  c  linux  pthreads 

16
指针澄清的指针
我在按照本教程讲解关于指针的工作方式。 让我引用相关段落: int i = 5, j = 6, k = 7; int *ip1 = &i, *ip2 = &j; 现在我们可以设置 int **ipp = &ip1; 并ipp指向ip1指向i。*ipp是ip1,和**ipp是i或。5。我们可以用熟悉的方格和箭头符号来说明这种情况,如下所示: 如果那我们说 *ipp = ip2; 我们已将ipp(ip1)指向的指针更改为包含的副本ip2,因此它(ip1)现在指向j: 我的问题是:为什么在第二张图片中ipp仍指向ip1但不指向ip2?
142 c  pointers 

6
_DEBUG和NDEBUG
应该使用哪个预处理程序定义来指定代码的调试部分? 使用#ifdef _DEBUGor #ifndef NDEBUG或有更好的方法来做到这一点,例如#define MY_DEBUG? 我认为_DEBUG特定于Visual Studio,是NDEBUG标准吗?
142 c++  c  debugging 


4
BLAS,LAPACK和ATLAS之间是什么关系
我不了解BLAS,LAPACK和ATLAS之间的关系,以及如何将它们一起使用!我一直在浏览他们的所有手册,对BLAS和LAPACK以及它们在很少发现的示例中如何使用都有一个大致的了解,但是我找不到使用ATLAS的任何实际示例来了解它们与ALAS的关系这两个。 我正在尝试对矩阵做一些底层工作,我的主要语言是C。首先,我想使用GSL,但是它说如果要获得最佳性能,则应该使用BLAS和ATLAS。有没有一个很好的网页给出了一些很好的示例(如何在C中一起使用)?换句话说,我正在寻找使用这三个(或它们的任何子集!)的教程。总之我很困惑!
142 c  lapack  blas  atlas 

30
C的隐藏功能
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它当前不接受新的答案或互动。 我知道所有C编译器实现背后都有一个标准,因此应该没有隐藏的功能。尽管如此,我确信所有C开发人员都有他们一直使用的隐藏/秘密技巧。
141 c  hidden-features 

21
将Objective-C Typedef转换为其等效字符串
假设我在.h文件中声明了typedef,如下所示: typedef enum { JSON, XML, Atom, RSS } FormatType; 我想构建一个将typedef的数值转换为字符串的函数。例如,如果消息[self toString:JSON]已发送;它将返回“ JSON”。 该函数将如下所示: -(NSString *) toString:(FormatType)formatType { //need help here return []; } 顺便说一句,如果我尝试这种语法 [self toString:FormatType.JSON]; 将typedef值传递给方法,我得到一个错误。我想念什么?
141 c  objective-c  enums  typedef 

16
if-else块中的“ if(0)”块的用途是什么?
我的问题是我在本主题中提到的那行,在生产代码中的许多地方都可以看到。 整体代码如下所示: if (0) { // Empty braces } else if (some_fn_call()) { // actual code } else if (some_other_fn_call()) { // another actual code ... } else { // default case } 其他分支与我的问题无关。我想知道放在if (0)这里的意思是什么。花括号是空的,所以我不认为它应该注释一些代码块。它会迫使编译器进行一些优化,还是其意图有所不同? 我试图在SO和Internet上搜索这种明显的情况,但是没有成功。关于JavaScript,也有类似的问题,但不是C。还有另一个问题,如果在“ if”条件中分配零,会发生什么?,但它讨论了变量的零赋值,而不是'if(0)'用法本身。
141 c  if-statement 

23
如何向初学者解释C指针(声明与一元运算符)?
最近,我很高兴向C编程初学者介绍了指针,并偶然发现了以下困难。如果您已经知道如何使用指针,这似乎根本就不是问题,但是请尝试以清晰的心态看下面的示例: int foo = 1; int *bar = &foo; printf("%p\n", (void *)&foo); printf("%i\n", *bar); 对于绝对的初学者来说,输出结果可能令人惊讶。在第2行中,他/她刚刚声明* bar为&foo,但是在第4行中,结果表明* bar实际上是foo而不是&foo !! 您可能会说,造成混淆的原因是*符号的含糊之处:在第2行中,它用于声明指针。在第4行中,它用作一元运算符,用于获取指针指向的值。两种不同的东西,对不对? 但是,这种“解释”根本没有帮助初学者。它指出了细微的差异,从而引入了一个新概念。这不是正确的教学方法。 那么,克尼根和里奇如何解释呢? 一元运算符*是间接或取消引用运算符;当应用于指针时,它访问指针指向的对象。[…] 指针ip的声明int *ip旨在用作助记符;它表示该表达式*ip是一个int。变量声明的语法模仿可能出现该变量的表达式的语法。 int *ip应该读成“ *ip会返回int”?但是,为什么声明之后的赋值不遵循该模式呢?如果初学者想初始化变量怎么办?int *ip = 1(读取:*ip将返回int和,int则返回1)将无法正常工作。概念模型似乎并不连贯。我在这里想念什么吗? 编辑:它试图在这里总结答案。
141 c  pointers 


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.