
C语言
maimang09
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Intrusive MPSC node-based queue
mpscq :Multiple-producer single-consumer lock free queueAdvantages:+ Intrusive. No need for additional internal nodes.+ Wait-free and fast producers. One XCHG is maximum what one can get with mu...转载 2020-01-03 10:25:35 · 337 阅读 · 0 评论 -
浅谈编程语言的类型系统
转自:http://blog.youkuaiyun.com/ce123/article/details/8976652浅谈编程语言的类型系统类型系统(type system)是一门编程语言最核心也是最基础的部分。无论该语言基于何种编程范式,都必须在开天辟地之初首先对类型系统作出明确的定义。这是因为,编程语言虽然五花八门,千奇百怪,但是归根结底,编程语言最终的目标,本质上无非是回答两个问题:转载 2013-07-20 16:55:15 · 645 阅读 · 0 评论 -
How to Use C's volatile Keyword C 语言volatile
http://www.barrgroup.com/Embedded-Systems/How-To/C-Volatile-Keywordby Nigel JonesThe proper use of C's volatile keyword is poorly understood by many programmers. This is not surprising, as转载 2012-11-24 16:05:18 · 1077 阅读 · 0 评论 -
preprocessor error directive --> #error 指令
It's a preprocessor directive that is used (for example) when you expect one of several possible-D symbols to be defined, but none is.#if defined(BUILD_TYPE_NORMAL)# define DEBUG(x) do {;} while转载 2012-11-24 16:02:02 · 2665 阅读 · 0 评论 -
BSS段
http://winn0301.blog.sohu.com/142209655.htmlBSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。BSS节不包含任何数据,只是简单的维护开始和结束的地址,以便内存区能在运行时被有效地清零。BSS节在应用程序的二转载 2012-11-01 21:02:29 · 727 阅读 · 0 评论 -
大内高手—常见内存错误
大内高手—常见内存错误 http://blog.youkuaiyun.com/absurd/article/details/908601 随着诸如代码重构和单元测试等方法引入实践,调试技能渐渐弱化了,甚至有人主张废除调试器。这是有道理的,原因在于调试的代价往往太大了,特别是调试系统集成之后的BUG,一个BUG花了几天甚至数周时间并非罕见。 而这些难以定位的BUG基本上可以归为两类:内存错误转载 2012-08-02 21:36:34 · 639 阅读 · 0 评论 -
详解C中volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;vo转载 2012-07-08 17:06:21 · 502 阅读 · 0 评论 -
汇编语言---函数调用栈
http://www.cnblogs.com/taek/archive/2012/02/05/2338877.html当发生函数调用的时候,栈空间中存放的数据是这样的:1、调用者函数把被调函数所需要的参数按照与被调函数的形参顺序相反的顺序压入栈中,即:从右向左依次把被调函数所需要的参数压入栈;2、调用者函数使用call指令调用被调函数,并把call指令的下一条指令的地址当成返回地址转载 2012-07-08 17:56:34 · 763 阅读 · 0 评论 -
位域中的字节对齐
#include int main(void){ union { char c; short s:8; }u; struct { char c; short s:8; }s; struct { short s:原创 2012-07-07 10:44:57 · 513 阅读 · 0 评论 -
共享库函数调用原理
共享库函数调用原理http://www.limodev.cn/2008/10/27/%E5%85%B1%E4%BA%AB%E5%BA%93%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E5%8E%9F%E7%90%86/我们知道函数名就是一个内存地址,这个地址指向函数的入口。调用函数就是压入参数,保存返回地址,然后跳转到函数名指向的代码。问题是,如果转载 2012-05-15 21:39:10 · 718 阅读 · 0 评论 -
The #line directive
reference: https://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Flc.htmThe #line directiveA preprocessor line control directive su转载 2013-10-26 11:10:43 · 716 阅读 · 0 评论 -
The ``Clockwise/Spiral Rule''
[This was posted to comp.lang.c by its author, David Anderson, on 1994-05-06.]The ``Clockwise/Spiral Rule''By David AndersonThere is a technique known as the ``Clockwise/Spiral Rule'' which enab转载 2013-10-04 17:04:50 · 734 阅读 · 0 评论 -
Complex Numbers(_Complex)
Complex NumbersISO C99 supports complex floating data types, and as an extension GCCsupports them in C89 mode and in C++, and supports complex integer datatypes which are not part of ISO C99. You转载 2013-10-26 11:44:06 · 928 阅读 · 0 评论 -
The Ultimate Guide to Reducing Code-size With GNU GCC for ARM Cortex-M/使用适用于ARM Cortex-M的GNU GCC减少代码
使用适用于ARM Cortex-M的GNU GCC减少代码大小的终极指南The embedded industry has been talking about code size for decades. In particular, this discussion has applied to microcontroller compilers. Nowadays, more or les...转载 2019-07-23 13:51:46 · 621 阅读 · 0 评论 -
怎么生成gRPC 静态链接应用程序
$ man pkg-config--static Output libraries suitable for static linking. That means including any private libraries in the output. This relies on proper tag‐ ging in the...原创 2019-07-18 17:34:53 · 1391 阅读 · 0 评论 -
int to string 整型转化为字符串( C语言接口与实现:创建可重用软件的技术)
/******************************************************Reference the >chapter 3 atom*******************************************************/char *int_2_str(long n) { static char str[43]; c原创 2015-07-21 21:47:50 · 966 阅读 · 0 评论 -
calculate the square of a number
int p(int n) { int a[n]; //works on C99 and above return (&a)[n] - a;} It returns n^2. Question is, how does it do that? After a little testing, I have found that betwee转载 2015-01-14 22:04:51 · 795 阅读 · 0 评论 -
库函数之——confstr
CONFSTR(3) Linux Programmer's Manual CONFSTR(3)NAME confstr - get configuration dependent string variablesSYNOPSIS #include size_t confstr(i原创 2014-08-16 20:24:15 · 1325 阅读 · 0 评论 -
C语言家族扩展
http://www.kerneltravel.net/newbie/gcc_man.html#5.1转载 2013-12-01 22:25:22 · 2332 阅读 · 0 评论 -
打印日历程序
由于工作需要在嵌入式平台上绘制日历,在网上查找了相关日历的算法和公式,现在总结如下:首先给出通过指定日期,算出该天是星期几的两个常用公式:其中最著名的是蔡勒(Zeller)公式。即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1(1)公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m 大于等于 3,小于等于 14原创 2013-12-01 19:38:56 · 899 阅读 · 0 评论 -
宏中"#"和"##"的用法
http://blog.youkuaiyun.com/ithomer/article/details/6004159一、一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include #include using namespace std; #define STR(s) #s #define CONS(a,b) in转载 2013-11-23 20:58:54 · 643 阅读 · 0 评论 -
程序员必知8大排序3大查找(一)
http://blog.youkuaiyun.com/shan9liang/article/details/7540928《程序员必知8大排序3大查找(一)》《程序员必知8大排序3大查找(三)》 本文我们先把剩余的三大排序说完,然后讨论一下排序的稳定性问题,最后再总结一下排序的时间复杂度和空间复杂度。(1到5见上篇)6、快速排序 (1)基本思想:选择转载 2012-05-15 21:24:49 · 457 阅读 · 0 评论 -
stl_numeric中的power算法剖析
http://www.diybl.com/course/3_program/c++/cppjs/2007114/83860.html在power算法中求一个数x的n次方分成两部分,一是当n为偶数时计算方法,另一部分是当n为奇数时的计算方法。在n的"分解"过程中,还可能还会出现偶数和奇数部分的代码都参与计算。 n为偶数,计算方式: 假设 Y = x*x , Z = n / 2转载 2012-05-07 23:20:20 · 718 阅读 · 0 评论 -
深入理解C/C++数组和指针
http://blog.youkuaiyun.com/walkinginthewind/article/details/7044380 C语言中数组和指针是一种很特别的关系,首先本质上肯定是不同的,本文各个角度论述数组和指针。一、数组与指针的关系数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值。数组可以在某些情况下转换为指针,当数组名在表达式中使用时,编译器会把数组名转载 2011-12-06 20:27:15 · 425 阅读 · 0 评论 -
栈帧
http://blog.youkuaiyun.com/yxysdcl/article/details/5569351首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。下图为典型的存取器安排,观察栈在其中的位置 入栈操作:push e转载 2011-11-24 21:45:38 · 1539 阅读 · 2 评论 -
Linux fcntl函数详解
http://blog.youkuaiyun.com/s_k_yliu/article/details/6642635功能描述:根据文件描述词来操作文件的特性。#include #include int fcntl(int fd, int cmd);int fcntl(int fd, int cmd, long arg);int fcntl(int fd, int cmd, struc转载 2011-10-28 20:12:36 · 620 阅读 · 0 评论 -
htons函数详解:网络与主机字节转换函数:(s 就是short l是long h是host n是network)
http://blog.youkuaiyun.com/libuding/article/details/5860578 Part 1: htons函数具体解释 在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序。 在Intel机器下,执行以下程序int main()...{ printf("%d /n"转载 2011-10-28 19:57:19 · 1003 阅读 · 0 评论 -
关于getc
在linux标准函数里面,在stdio.h里面我们可以看到: /* The C standard explicitly says this is a macro, so we always do the optimization for it. */ #define getc(_fp) _IO_getc (_fp) 关于getc的宏定义,从这里可以告诉我们一个道理我们可以借助g转载 2011-10-26 22:35:32 · 2023 阅读 · 1 评论 -
Linux C 编程一站式学习 第25章 C标准库 综合练习二题解 文件格式转换
/**************************************************test.ini file is:;Configuration of http[http]domain=www.mysite.comport=8080cgihome=/cgi-bin ;Configuration of db[database]serv原创 2011-10-26 20:52:20 · 521 阅读 · 0 评论 -
记录系统当前时间到一个文件中
/******************************************************************************************************/#include #include #include #include void record_systime(void){ FILE *fp = NUL原创 2011-10-25 20:37:42 · 509 阅读 · 0 评论 -
删除字符串中多余的空格 shrink_space
/*********************************************************************NAME shrink_space - shrink one or more space to one space.SYNOPSIS char *shrink_space(char *dest, char const原创 2011-10-24 18:46:29 · 502 阅读 · 0 评论 -
c语言 strtok strtok_r的一种实现
#include #include char * strtok1(char *str, const char *delim){ char *p = NULL; char *pd = NULL; static char *ps = NULL; char flag = 0; //if ps not point to the last of原创 2011-10-23 12:11:18 · 814 阅读 · 0 评论 -
Inline Hook 之(监视任意函数)
http://blog.youkuaiyun.com/masefee/article/details/6326634 前面已经写过两次inline hook的博文了,第一篇为:《C/C++ HOOK API(原理深入剖析之-LoadLibraryA)》,这篇博文的方法是通过修改任意函数的前面N个字节,实现跳转并进入到我们自定义的hook函数里,执行完毕我们的hook函数之后,再直接调用被hook的函数转载 2011-12-11 11:41:03 · 772 阅读 · 0 评论 -
C语言中把数字转换为字符串
http://www.eefocus.com/haijiaoyouzi/blog/2012-02/206684_4b122.html在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf有用得多。sp转载 2012-05-07 21:20:25 · 801 阅读 · 0 评论 -
C语言中将绝对地址转换为函数指针以及跳转到内存指定位置处执行的技巧
要对绝对地址0x100000赋值,我们可以用 (unsigned int * ) 0x100000 = 1234; 那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做? *((void (*)( ))0x100000 ) ( ); 首先要将0x100000强制转换成函数指针,即: (void (*)())0x10000转载 2011-09-19 22:37:24 · 7984 阅读 · 3 评论 -
堆和栈
2009-08-02 18:20:25标签:栈堆 嵌入式 程序原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://yunli.blog.51cto.com/831344/186896堆(heap)和栈(stack)是非常重要的概念,当我们进行程序开发时理解它们非常重要,尤其是对于嵌入式系统开发。比转载 2012-03-03 22:36:20 · 400 阅读 · 0 评论 -
全面优化你的memcpy!
http://blog.21ic.com/user1/2092/archives/2006/8095.html 在BlackFin上面关全局中断其实是很麻烦的事.它不是清除或者设置一个全局中断使能位,而是把core中断屏蔽寄存器所有位都清成0,这个时候你需要设置一个变量来保存以前在core中断屏蔽寄存器中的值,以便后面恢复,这里我给出前段时间写的两个函数。由于BlackFin的特殊转载 2012-02-02 22:38:47 · 9482 阅读 · 0 评论 -
结构体变量在定义时赋值
http://bbs.chinaunix.net/thread-1264281-1-1.html在看Wireless tools这个工具的源代码时,看到iwlib.c这个文件,发现了standard_ioctl_descr这个变量,它是iw_ioctl_description定义的数组,iw_ioctl_description是这样定义的:struct iw_ioctl_des转载 2012-02-01 22:14:56 · 4486 阅读 · 0 评论 -
两个函数声明的理解
http://blog.youkuaiyun.com/ustc_dylan/article/details/5721731点击打开链接1 当今计算机启动时,硬件会去调用地址为0的函数,用c语言模拟这个过程,应该如何声明这个函数?调用某个函数,c语言中一般会利用指向函数的指针,即如下形式: void (*f)(void);上面的表达式的意思是, f是指向函数的指针转载 2011-12-28 23:05:05 · 492 阅读 · 0 评论 -
C 程序内存分配
http://blog.youkuaiyun.com/pinglinux/article/details/6578541C程序一般分为1.程序段:程序段为程序代码在内存中的映射.一个程序可以在内存中多有个副本.2.初始化过的数据:在程序运行值初已经对变量进行初始化的3.未初始化过的数据:在程转载 2011-07-06 21:28:24 · 615 阅读 · 0 评论