Questions tagged «c»

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

1
##(双哈希)在预处理程序指令中做什么?
#define DEFINE_STAT(Stat) \ struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat; 上面的内容摘自Unreal 4,我知道我可以在虚幻的论坛上提出这个问题,但是我认为这是一个一般的C ++问题,值得在这里提出。 我知道第一行定义了一个宏,但是我并不精通C ++中的预处理器恶作剧,所以我迷路了。逻辑告诉我反斜杠表示声明继续到下一行。 FThreadSafeStaticStat看起来有点像模板,但是里面有#的代码,而且是我在C ++中从未见过的语法 有人可以告诉我这是什么意思吗?我了解您可能无法使用Unreal 4,但这只是我不了解的语法。




11
是否具有在C / C ++中复制数组的功能?
我是一名学习C / C ++的Java程序员。所以我知道Java具有类似System.arraycopy();的功能。复制数组。我想知道在C或C ++中是否有一个函数可以复制数组。我只能通过使用for循环,指针等来找到复制数组的实现。有可以用来复制数组的函数吗?
91 c++  c  arrays 

8
是否可以将C指针初始化为NULL?
我一直在写类似的东西 char *x=NULL; 假设 char *x=2; 将创建一个char指向地址2 的指针。 但是,在《 GNU C编程指南》中,它指出int *my_int_ptr = 2;将整数值存储2到my_int_ptr分配时的随机地址中。 这似乎在暗示自己char *x=NULL被分配任何价值NULL投的char是在内存中的一些随机地址。 而 #include <stdlib.h> #include <stdio.h> int main() { char *x=NULL; if (x==NULL) printf("is NULL\n"); return EXIT_SUCCESS; } 确实打印 一片空白 当我编译并运行它时,我担心我依赖未定义的行为,或者至少是未指定的行为,因此我应该编写 char *x; x=NULL; 代替。




2
这是什么 (( ))?
浏览gcc编译器源代码(gcc / c-family / c-pragma.c)时,我看到: typedef struct GTY(()) align_stack { int alignment; tree id; struct align_stack * prev; } align_stack; 而且不管我后面有多少C编程年限,这些位:(())我还完全不知道。有人可以解释一下什么意思吗?Google似乎找不到它。
90 c++  c 

1
是什么使Java比C更容易解析?
我熟悉C和C ++的语法对上下文敏感的事实,特别是您需要在C中使用“ lexer hack”。另一方面,我的印象是您可以仅用尽管这两种语言之间有相当大的相似性,但它们还是2个前瞻标记。 为了使C解析起来更容易处理,您需要更改什么? 我之所以问是因为,我所见过的有关C的上下文敏感度的所有示例在技术上都是允许的,但非常奇怪。例如, foo (a); 可能正在foo通过参数调用void函数a。或者,它可能声明a是type的对象foo,但您也可以轻松摆脱寄生。在某种程度上,这种怪异之所以会发生是因为C语法的“直接声明符”生成规则满足了声明函数和变量的双重目的。 另一方面,Java语法对变量声明和函数声明有单独的生产规则。如果你写 foo a; 那么您知道它是一个变量声明,foo可以明确地解析为类型名。如果foo尚未在当前作用域的某个位置定义该类,则这可能不是有效的代码,但这是语义分析的工作,可以在以后的编译器遍历中执行。 我已经看到它说由于typedef很难解析C,但是您也可以在Java中声明自己的类型。除了direct_declarator,还有哪些C语法规则有误?
90 java  c  parsing  grammar 

16
我听说i ++不是线程安全的,++ i是线程安全的吗?
我听说i ++不是线程安全的语句,因为在汇编中,i ++减少了将原始值存储为temp的某个地方,然后递增它,然后替换它,这可能会被上下文切换中断。 但是,我想知道++ i。据我所知,这将减少为单个汇编指令,例如“ add r1,r1、1”,并且由于它只是一条指令,因此上下文切换将不会中断该指令。 谁能澄清?我假设正在使用x86平台。
90 c++  c  multithreading 

17
带返回的switch语句-代码正确性
假设我在C语言中的代码大致具有以下结构: switch (something) { case 0: return "blah"; break; case 1: case 4: return "foo"; break; case 2: case 3: return "bar"; break; default: return "foobar"; break; } 现在显然,breaks对于代码正确运行不是必需的,但是如果我不把它们放在我的眼里,这似乎是一种不好的做法。 你怎么看?删除它们可以吗?还是保留它们以提高“正确性”?

5
如何使backtrace()/ backtrace_symbols()打印函数名称?
特定于Linux,backtrace()并backtrace_symbols()允许您生成程序的调用跟踪。但是,它仅打印函数地址,而不显示我程序的名称。如何使它们也打印函数名称?我试着编译程序-g以及-ggdb。下面的测试用例仅显示以下内容: 回溯------------ ./a.out()[0x8048616] ./a.out()[0x8048623] /lib/libc.so.6(__libc_start_main+0xf3)[0x4a937413] ./a.out()[0x8048421] ---------------------- 我希望前2个项目也显示函数名称,foo并且main 码: #include <execinfo.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <stdlib.h> static void full_write(int fd, const char *buf, size_t len) { while (len > 0) { ssize_t ret = write(fd, buf, len); if ((ret == -1) && (errno != EINTR)) break; buf …
90 c  linux  debugging  backtrace 

12
C内存管理
我一直听说,在C语言中,您必须真正观察如何管理内存。而且我仍然开始学习C,但是到目前为止,我根本不需要做任何内存管理相关的活动。.我一直想像必须释放变量并做各种丑陋的事情。但这似乎并非如此。 有人可以通过代码示例向我展示您何时需要执行“内存管理”的示例?
90 c  memory 

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.