Questions tagged «c»

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

22
设置的最低有效位的位置
我正在寻找一种有效的方法来确定设置为整数的最低有效位的位置,例如对于0x0FF0它将是4。 一个简单的实现是这样的: unsigned GetLowestBitPos(unsigned value) { assert(value != 0); // handled separately unsigned pos = 0; while (!(value & 1)) { value >>= 1; ++pos; } return pos; } 有什么想法可以减少一些周期吗? (注意:这个问题是针对喜欢这种东西的人,而不是告诉我xyzoptimization是邪恶的。) [edit] 谢谢大家的想法!我也学到了其他一些东西。凉!


27
查找C中整数的最高设置位(msb)的最快/最有效方法是什么?
如果我有一些整数n,并且我想知道最高有效位的位置(也就是说,如果最低有效位在右边,那么我想知道最远的左位为1),找出最快/最有效的方法是什么? 我知道POSIX ffs()在strings.h中支持一种方法来查找第一个设置位,但是似乎没有相应的fls()方法。 是否有一些我确实不知道的真正明显的方法? 如果无法使用POSIX函数进行可移植性该怎么办? 编辑:在32位和64位体系结构上均可使用的解决方案怎么样(许多代码清单似乎只在32位int上运行)。


2
Linux中具有多个线程的信号处理
在Linux中,当程序(可能具有多个线程)接收到诸如SIGTERM或SIGHUP之类的信号时会发生什么? 哪个线程拦截信号?多个线程可以得到相同的信号吗?是否有专门用于处理信号的特殊线程?如果不是,那么在处理信号的线程内部会发生什么?信号处理程序例程完成后,如何恢复执行?
119 c  linux  multithreading  signals  ipc 

5
FFmpeg C API文档/教程[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 12个月前关闭。 改善这个问题 我正在尝试查找使用FFmpeg C API的文档。似乎只有命令行文档可用。 有没有好的文档/教程/链接?
119 c  api  documentation  ffmpeg 

13
C函数内部的静态变量
什么将被打印出来?6 6或6 7?又为什么呢 void foo() { static int x = 5; x++; printf("%d", x); } int main() { foo(); foo(); return 0; }
119 c  static 

10
创建一个指向二维数组的指针
我需要一个指向静态二维数组的指针。怎么做? static uint8_t l_matrix[10][20]; void test(){ uint8_t **matrix_ptr = l_matrix; //wrong idea } 我收到各种错误,例如: 警告:从不兼容的指针类型分配 下标值既不是数组也不是指针 错误:无效使用弹性数组成员
119 c  arrays  pointers 

6
如何在C中打印到stderr?
在C中,使用printffrom 可以很容易地打印到标准输出stdio.h。 但是,如何打印到stderr?我们fprintf显然可以使用它来实现,但是它的语法似乎很奇怪。也许我们可以printf用来打印到stderr?
119 c  printf  stderr 

1
CMAKE中添加-fPIC编译器选项的惯用方式是什么?
我至少遇到了3种方法来做,我想知道哪种是惯用的方法。几乎所有静态库都需要这样做。我很惊讶CMake中的Makefile生成器没有自动将其添加到静态库中。(除非我想念什么?) target_compile_options(myLib PRIVATE -fPIC) add_compile_options(-fPIC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic") 我相信可能还会有其他变化。(如果找到一个,请编辑我的问题) 如果您碰巧知道此问题的答案,您是否还知道是否有一种方法可以使第三方CMake项目使用此标志进行编译,而无需修改其CMakeLists.txt文件?我遇到了缺少该标志的静态库。在将静态库编译为动态库时会引起问题。 你得到: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
119 c++  c  cmake 

6
检测stdin是终端还是管道?
当我python从终端不带任何参数执行“ ”时,它将弹出Python交互式shell。 当我cat | python从终端执行“ ”时,它不会启动交互模式。不知何故,它没有得到任何输入,就检测到它已连接到管道。 如何在C或C ++或Qt中进行类似的检测?
118 c++  c  qt  pipe  stdin 

9
内存泄漏能走多远?
我已经多次遇到内存泄漏。通常,当我- malloc希望没有明天,或者FILE *像脏衣服一样晃来晃去时。我通常认为(拼命:希望)至少在程序终止时才清理所有内存。在程序终止或崩溃时,是否存在无法收集泄漏内存的情况? 如果答案因语言而异,那么让我们关注C(++)。 请注意,短语“好像没有明天”和“晃来晃去……就像脏衣服”一样是双曲线的用法。不安全* malloc可能伤害您所爱的人。另外,请注意不要弄脏衣物。
118 c++  c  memory  memory-leaks 

3
make的DESTDIR和PREFIX
我正在尝试将软件安装到特定目录。我发现了几种方法,但不确定它们之间有什么区别。 ./configure --prefix=*** make install DESTDIR=*** make install prefix=*** 我对这三个功能感到困惑。他们是否达到了相同的目标?
118 c  linux  bash  makefile  configure 

7
重新定义NULL
我正在为地址0x0000有效且包含端口I / O的系统编写C代码。因此,访问NULL指针的任何可能的错误都将保持未被检测到的状态,同时会导致危险的行为。 出于这个原因,我希望将NULL重新定义为另一个地址,例如无效的地址。如果我不小心访问了这样的地址,我将得到一个硬件中断,可以处理该错误。我恰好可以访问此编译器的stddef.h,因此实际上可以更改标准标头并重新定义NULL。 我的问题是:这会与C标准冲突吗?据我从标准7.17可以看出,该宏是实现定义的。标准中是否有其他地方声明NULL 必须为0? 另一个问题是,无论数据类型如何,大量编译器都将所有内容都设置为零,从而执行静态初始化。即使该标准规定编译器应将整数设置为零,并将指针设置为NULL。如果我为编译器重新定义NULL,那么我知道这种静态初始化将失败。即使我大胆地手动更改了编译器标头,我也可以认为这是不正确的编译器行为吗?因为我可以肯定地知道该特定的编译器在执行静态初始化时不会访问NULL宏。
118 c  null 

19
有没有典型的状态机实施模式?
我们需要在C中实现一个简单的状态机。 标准的switch语句是最好的方法吗? 我们有一个当前状态(状态)和一个转换触发器。 switch(state) { case STATE_1: state = DoState1(transition); break; case STATE_2: state = DoState2(transition); break; } ... DoState2(int transition) { // Do State Work ... if(transition == FROM_STATE_2) { // New state when doing STATE 2 -> STATE 2 } if(transition == FROM_STATE_1) { // New State when …

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.