Questions tagged «c»

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


17
为什么要使用指针?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我知道这是一个非常基本的问题,但是在用高级语言编写了一些项目之后,我才开始进行一些基本的C ++编程。 基本上我有三个问题: 为什么在普通变量上使用指针? 我应该在何时何地使用指针? 如何将指针与数组一起使用?
356 c++  c  pointers 

5
__attribute __((constructor))到底如何工作?
似乎很清楚,它应该进行设置。 它什么时候运行? 为什么有两个括号? 是__attribute__功能吗?宏?句法? 这在C中有效吗?C ++? 它使用的功能是否必须是静态的? 什么时候__attribute__((destructor))运行? Objective-C中的示例: __attribute__((constructor)) static void initialize_navigationBarImages() { navigationBarImages = [[NSMutableDictionary alloc] init]; } __attribute__((destructor)) static void destroy_navigationBarImages() { [navigationBarImages release]; }
347 c++  objective-c  c  gcc 

17
如何在C中连接const / literal字符串?
我正在使用C语言工作,因此我不得不串联一些东西。 现在我有这个: message = strcat("TEXT ", var); message2 = strcat(strcat("TEXT ", foo), strcat(" TEXT ", bar)); 现在,如果您有C方面的经验,我相信您会在尝试运行它时遇到分段错误。那么我该如何解决呢?
346 c  string  concatenation 

10
在C中打印前导0?
我试图找到一种打印前导0的好方法,例如邮政编码为01001。虽然该数字将存储为1001,但是这样做的一种好方法是什么? 我想使用任一种case语句/ if,然后找出数字的位数,然后将其转换为带有额外0的char数组以进行打印,但我忍不住想了想用我无法理解的printf格式语法。
343 c  printf 

8
如何在C中打印f“ unsigned long”?
我永远无法理解如何unsigned long在C中打印数据类型。 假设unsigned_foo是unsigned long,那么我尝试: printf("%lu\n", unsigned_foo) printf("%du\n", unsigned_foo) printf("%ud\n", unsigned_foo) printf("%ll\n", unsigned_foo) printf("%ld\n", unsigned_foo) printf("%dl\n", unsigned_foo) 所有这些都打印出某种-123123123数字,而不是unsigned long我的数字。



10
传递可变数量的参数
假设我有一个C函数,该函数需要可变数量的参数:如何调用另一个从其内部期望可变数量参数的函数,并将所有传入第一个函数的参数传递给我? 例: void format_string(char *fmt, ...); void debug_print(int dbg_lvl, char *fmt, ...) { format_string(fmt, /* how do I pass all the arguments from '...'? */); fprintf(stdout, fmt); }

22
未初始化的局部变量是最快的随机数生成器吗?
我知道未初始化的局部变量是未定义的行为(UB),并且该值可能具有陷阱表示,这可能会影响进一步的操作,但是有时我只想将随机数用于视觉表示,而不会在其他部分使用它们程序,例如,在视觉效果中设置具有随机颜色的内容,例如: void updateEffect(){ for(int i=0;i<1000;i++){ int r; int g; int b; star[i].setColor(r%255,g%255,b%255); bool isVisible; star[i].setVisible(isVisible); } } 比那快吗 void updateEffect(){ for(int i=0;i<1000;i++){ star[i].setColor(rand()%255,rand()%255,rand()%255); star[i].setVisible(rand()%2==0?true:false); } } 并且比其他随机数生成器还快?

30
无循环或有条件打印1至1000
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 任务:打印从1到1000的数字,而不使用任何循环或条件语句。不要只写printf()or cout语句1000次。 您将如何使用C或C ++做到这一点?
323 c++  c  printf 

23
在单行if或loop中使用大括号(即{})的目的是什么?
我正在阅读我的C ++讲师的一些讲义,他写了以下内容: 使用缩进//确定 从不依赖运算符优先级-始终使用括号//确定 始终使用{}块-即使仅一行// 也不行,为什么? 比较左侧的常量对象//确定 使用unsigned表示> = 0 //好的技巧 删除后将Pointer设置为NULL-双重删除保护//不错 第三种技术对我来说还不清楚:将一行放置在a中会得到{ ... }什么? 例如,使用以下奇怪的代码: int j = 0; for (int i = 0 ; i < 100 ; ++i) { if (i % 2 == 0) { j++; } } 并替换为: int j = 0; for (int i …

9
如何在C / Objective-C中的多行中分割字符串文字?
我有一个很长的sqlite查询: const char *sql_query = "SELECT statuses.word_id FROM lang1_words, statuses WHERE statuses.word_id = lang1_words.word_id ORDER BY lang1_words.word ASC"; 如何将其分成多行以使其更易于阅读?如果我执行以下操作: const char *sql_query = "SELECT word_id FROM table1, table2 WHERE table2.word_id = table1.word_id ORDER BY table1.word ASC"; 我收到一个错误。 有没有办法在多行中编写查询?
319 c  objective-c 

4
结合C ++和C-#ifdef __cplusplus如何工作?
我正在一个有很多遗留C代码的项目中。我们也开始使用C ++进行编写,以期最终也转换旧代码。我对C和C ++的交互方式有些困惑。我了解到,用C ++编译器包装C代码extern "C"不会破坏C代码的名称,但是我不确定如何实现这一点。 因此,在每个C头文件的顶部(在包含保护之后),我们有 #ifdef __cplusplus extern "C" { #endif 在底部,我们写 #ifdef __cplusplus } #endif 在这两者之间,我们拥有所有的include,typedef和函数原型。我有几个问题,看我是否正确理解: 如果我有一个C ++文件A.hh,其中包括一个C头文件Bh,包括另一个C头文件Ch,那么该如何工作?我认为,当编译器进入Bh时, __cplusplus将被定义,因此它将包装代码extern "C" (并且__cplusplus不会在此块内定义)。因此,当它进入Ch时, __cplusplus将不会被定义,并且代码也不会被包装在中 extern "C"。它是否正确? 将一段代码包装起来有什么问题 extern "C" { extern "C" { .. } }吗?第二个extern "C" 怎么办? 我们不会在.c文件中放这个包装器,而在.h文件中放。那么,如果一个函数没有原型怎么办?编译器是否认为这是C ++函数? 我们还使用了一些用C编写的第三方代码,并且这些代码没有这种包装。每当我包含该库中的标头时,我都会extern "C"在#include中放一个。这是解决这个问题的正确方法吗? 最后,这是一个好主意吗?还有什么我们应该做的?在可预见的将来,我们将混合使用C和C ++,我想确保我们涵盖了所有基础知识。

4
此C函数应始终返回false,但不返回
很久以前,我在一个论坛上偶然发现了一个有趣的问题,我想知道答案。 考虑以下C函数: f1.c #include <stdbool.h> bool f1() { int var1 = 1000; int var2 = 2000; int var3 = var1 + var2; return (var3 == 0) ? true : false; } false自以来应始终返回var3 == 3000。该main函数如下所示: main.c #include <stdio.h> #include <stdbool.h> int main() { printf( f1() == true ? "true\n" : "false\n"); …
316 c  gcc 

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.