Questions tagged «c»

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

1
.exp的用途是什么,.lib和.dll有什么区别?
在编译和链接期间,.exp的用途是什么?.lib和.dll有什么区别?我知道将使用.lib,而运行程序时将使用链接和.dll。但是.lib和.dll到底有什么区别? .lib文件是否不包含来自.dll文件的功能代码?使用两个单独的文件有什么需要? 请说清楚。

10
如何检查C中某个变量是否属于某种类型(比较两种类型)?
在C(不是C ++ / C#)中,如何检查变量是否为某种类型? 例如,如下所示: double doubleVar; if( typeof(doubleVar) == double ) { printf("doubleVar is of type double!"); } 或更笼统:我如何比较两种类型,以便compare(double1,double2)评估为true,而compare(int,double)评估为false。我也想比较不同组成的结构。 基本上,我有一个对类型“ struct a”和“ struct b”的变量进行操作的函数。我想用“ struct a”变量做一件事,而用“ struct b”变量做另一件事。由于C不支持重载,并且void指针丢失了其类型信息,因此我需要检查类型。顺便说一句,typeof如果您不能比较类型,那么拥有运算符会有什么意义? sizeof方法对我来说似乎是一种实际的解决方法。谢谢你的帮助。我仍然发现它有点奇怪,因为类型是在编译时就知道的,但是如果我能想象我可以看到机器中的进程,为什么信息不是按类型存储,而是按字节大小存储。大小是唯一真正有意义的,除了地址。
73 c  types  struct 

5
函数指针的解除引用如何发生?
为什么以及如何取消引用函数指针只是“什么都不做”? 这就是我在说的: #include<stdio.h> void hello() { printf("hello"); } int main(void) { (*****hello)(); } 从这里的评论: 函数指针取消引用就可以了,但是生成的函数指示符将立即转换回函数指针 从这里的答案: 取消引用(按照您的想法)函数的指针意味着:访问CODE内存,因为它就像是DATA内存。 不能以这种方式取消对函数指针的引用。相反,它被称为。 我将使用“取消引用”和“调用”的名称。没关系。 无论如何:C的设计方式使得函数名称标识符以及变量保存函数的指针都具有相同的指向CODE存储器的地址。并且它允许通过在标识符或变量上使用call()语法跳转到该内存。 函数指针的取消引用到底如何工作?

4
C ++-包括unistd.h:为什么不好奇?
据说在C ++中包含C头文件时,应删除“ .h”后缀,然后在开头添加“ c”。例如,#include <cstdio> 代替#include <stdio.h>。但是当我sleep()在我的代码中使用时,#include <cunistd>不起作用,但是#include <unistd.h>起作用。为什么不<cunistd>呢?
73 c++  c 

5
您如何在C中声明字符串常量?
我知道在C中将数字常量声明为enums而不是使用#define它们是相当习惯的,或者至少是一种好的样式。 /* bad style */ #define MAXLINE 1024 /* good/better style */ enum { MAX_LINE = 1024 }; 字符串常量的定义是否有等效的规则? /* is this good style? */ #define HELLO "Hello World" /* or is this better? */ const char *HELLO2 = "Howdy"; 你喜欢哪个?如果可能,请显示这两种方法的一些缺点。
73 c  string 

9
为什么“不归还”功能归还?
我读 这个问题关于noreturn属性,它被用于那些不返回到调用函数。 然后我用C编写了一个程序。 #include <stdio.h> #include <stdnoreturn.h> noreturn void func() { printf("noreturn func\n"); } int main() { func(); } 并使用此生成的代码汇编: .LC0: .string "func" func: pushq %rbp movq %rsp, %rbp movl $.LC0, %edi call puts nop popq %rbp ret // ==> Here function return value. main: pushq %rbp movq %rsp, %rbp …


18
C宏有什么用?
我已经写了一些C语言,而且我读得足够好,可以大致了解它的功能,但是每次遇到宏时,它都会使我完全失望。我最终不得不记住宏是什么,并在阅读时将其替换在脑海中。我遇到的那些直观易懂的东西总是像小的迷你函数,所以我一直想知道为什么它们不只是函数。 我可以理解需要在预处理器中为调试或跨平台构建定义不同的构建类型,但是定义任意替换的功能似乎仅对使本来就很难理解的语言有用。 为什么为C引入了如此复杂的预处理器?还有没有人有使用它的示例,这会让我理解为什么#debug样式的条件编译时,为什么它似乎仍然用于简单的目的以外的用途? 编辑: 阅读了许多答案后,我仍然听不懂。最常见的答案是内联代码。如果inline关键字不这样做,则它有充分的理由不这样做,或者实现需要修复。我不明白为什么需要一种完全不同的机制来表示“真正内联此代码”(除了在内联之前编写的代码)。我也不理解提到的想法,即“如果它太愚蠢而无法放入函数中”。当然,任何需要输入并产生输出的代码都最好放在函数中。我想我可能不明白,因为我不习惯于编写C的微观优化,但是预处理器感觉就像是解决一些简单问题的复杂解决方案。



5
临时变量会减慢我的程序速度吗?
假设我有以下C代码: int i = 5; int j = 10; int result = i + j; 如果我要遍历多次,使用起来会更快int result = 5 + 10吗?我经常创建临时变量以使我的代码更具可读性,例如,如果两个变量是使用某个长表达式从某个数组中获取的,以计算索引。这在C语言中是不好的表现吗?那其他语言呢?




8
何时在全局变量前使用static关键字?
有人可以解释何时应该在头文件中定义的全局变量或常量之前使用static关键字吗? 例如,假设我有一个带有以下内容的头文件: const float kGameSpriteWidth = 12.0f; 应该static在前面const吗?有哪些最佳使用方法static?
73 c  static  keyword 

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.