随笔分类 - C语言
摘要:在gcc下,#pragma GCC diagnostic push用于记录当前的诊断状态,#pragma GCC diagnostic pop用于恢复诊断状态。 可以用于屏蔽局部代码的警告,格式如下: #pragma GCC diagnostic push #pragma GCC diagnosti
阅读全文
摘要:汇编语言对于大多数程序员来说都是进而远之的,原因当然是汇编语言晦涩难懂,各种指令搞得人头疼,不过汇编语言适当了解一些还是蛮有意思的,今天带大家在Linux上运行第一个汇编程序! 在 Linux 操作系统中,你有很多办法可以实现在屏幕上显示一个字符串,但最简洁的方式是使用 Linux 内核提供的系统调
阅读全文
摘要:GNU C语言的"__thread"与C11关键字_Thread_local等效,这里只说一下C11的。 #define thread_local _Thread_local //(since C11, then removed in C23) Since C23, thread_local is
阅读全文
摘要:并发程序设计把程序执行分成可以同时执行的多个线程。这程序设计带来了新的挑战,包括如何管理访问相同数据的不同线程。C11通过包含可选的头文件stdatomic.h和threads.h,提供了一些可选的(不是必须实现的)管理方法。值得注意的是,要通过各种红函数类访问原子类型。当一个线程对一个原子类型的对
阅读全文
摘要:fork和vfork的差别: fork 是 创建一个子进程,并把父进程的内存数据copy到子进程中。 vfork是 创建一个子进程,并和父进程的内存数据share一起用。 man vfork 一下,你可以看到,vfork是这样的工作的, 1)保证子进程先执行。 2)当子进程调用exit()或exec
阅读全文
摘要:编译器屏障 Compiler barrier /* The "volatile" is due to gcc bugs */#define barrier() __asm__ __volatile__("": : :"memory") 阻止编译器重排,保证编译程序时在优化屏障之前的指令不会在优化屏障
阅读全文
摘要:__builtin_ctz( ) / __buitlin_ctzll( ) 用法:返回括号内数的二进制表示数末尾0的个数 __buitlin_clz( ) / __buitlin_clzll( ) 用法:返回括号内数的二进制表示数前导0的个数 __builtin_popcount( ) 用法:返回括
阅读全文
摘要:1. c++调用的函数前加 "::"代表全局作用域的 2.__attribute__ ((format (printf, 2, 3))); 功能: __attribute__ format属性可以给被声明的函数加上类似printf或者scanf的特征,它可以使编译器检查函数声明和函数实际调用参数之间
阅读全文
摘要:C语言中的register关键字用于向编译器建议将变量存储在寄存器中,以便更快地访问。它是一种优化技术,用于提高程序的执行速度。 使用register关键字可以提高对该变量的访问速度,因为寄存器比内存访问速度更快。然而,使用register关键字并不能保证变量一定会存储在寄存器中,它只是向编译器提出
阅读全文
摘要:gcc内置宏查看:gcc -E -dM - </dev/null 1. __has_include __has_include是一个C++17标准定义的宏,它的用途是检查指定的文件是否存在,从而决定是否继续编译。它可以在头文件包含中使用,这样编译器就可以根据它的返回值来决定是否继续编译,从而提升编译
阅读全文