c
过圆心圈圈圆心
这个作者很懒,什么都没留下…
展开
-
可变参数 ... 和__VA_ARGS__ 以及 # ,##
define a(x,y) x##y // 这里是吧 x和y链接在一起 a(2,3) ---> 23。这些宏去解析变参列表。预处理器在将宏展开时,会用变参列表替换掉宏定义中的所有。例如 #define a(x) #x //预定义标识符来表示前面的变参列表,而不是像变参函数一样,使用。用 ... 表示变参列表,变参列表由不确定的参数组成,可变参数宏使用 C99 标准新增加的一个。在这里时把参数x转化为字符串。原创 2023-06-14 09:22:27 · 564 阅读 · 0 评论 -
2021-07-31 .h 如何 被编译 include 顺序
帮助你理解 在条件编译下如何理解 include#ifndef TESTLOW_H__#define TESTLOW_H__#include <stdio.h>/*** include 头文件是同从.c 开始加载.c里第一个.h 在加载 .h 里面的文件到.c 一步步的递归* *//*.c 里的.h 称之为 最外层 .h,.h 里的.h 为内嵌层。gcc -E 为了 .c加载 .h的时候从外由内递归 include*/typedef struct teststruc...原创 2021-07-31 23:59:50 · 168 阅读 · 0 评论 -
fgetc和getc的区别 The function getchar is defined to be equivalent to getc(stdin). The difference betwee
fgetc和getc的区别The function getchar is defined to be equivalent to getc(stdin). The difference between the first two functions is that getc can be implemented as a macro, whereas fgetc cannot be转载 2017-06-20 20:32:11 · 510 阅读 · 0 评论 -
volatile
一般说来,volatile用在如下的几个地方:1、中断服务程序中修改的供其它程序检测的变量需要加volatile;2、多任务环境下各任务间共享的标志应该加volatile;3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现原创 2017-03-14 20:02:19 · 271 阅读 · 0 评论 -
进程的先后
#include#include#include#includeint main(void){ pid_t resut; resut=fork(); if(resut ==0) { printf(" this is in the child progress \n "); printf("my father PID is %d \n", getppid()原创 2017-02-27 22:17:44 · 439 阅读 · 0 评论 -
c语言定义和声明
声明(declaration )指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,或者函数等。声明,用于编译器(compiler)识别变量名所引用的实体。以下这些就是声明:extern int bar; // 引用外部变量extern int g(int, int);double f(int, double); // 对于函数声明,extern关键字是可以省略的。原创 2016-12-01 21:03:29 · 557 阅读 · 0 评论 -
在C语言头文件里我们如何应用#ifndef
举个例子 我在led.h 头文件里这么写#ifndef __LED_H#define __LED_H.............#endif1 这样写是如何完成防止重复定义功能的2 __LED_H 这个宏定义我可以随便命名吗,还是这个#define后面的名字和 头文件led.h 得名字村子某种命名约束3 在应用头文件中 ifdef 是如何公工作的答案原创 2016-11-14 17:02:09 · 3040 阅读 · 0 评论 -
armlinuxgcc 安装经验
gedit /etc/environment添加/usr/local/arm/4.4.3/binsource /etc/environment安装完毕。arm-linux-gcc -v 查看可以看到版本信息。但是用arm-linux-gcc编译.c文件时还是会报错:error while loading shared libraries: libstdc++.so.6: cannot原创 2016-11-29 22:22:11 · 391 阅读 · 0 评论 -
解决Program received signal SIGSEGV, Segmentation fault.的辛酸
最近写一个算法很简单,涉及到链表的归并,在追求速度的时候,尽最大程度上使用了指针,然而却带来了异常灾难。编译通过,在debug的时候,我看见了这个。。。。。Program received signal SIGSEGV, Segmentation fault。omg,我准备解决这个问题,耗费了我整整一天来review代码。 其实解决这个问题很简单,只是我们没有抓住一个关键点。原创 2016-10-21 15:45:27 · 72179 阅读 · 3 评论 -
终端接口
POSIX终端接口 ?很多系统都支持POSIX终端(串口)接口。程序可以利用这个接口来改变终端的参数,比如,波特率,字符大小等等。要使用这个端口的话,你必须将头文件包含到你的程序中。这个头文件中定义了终端控制结构体和POSIX控制函数。与串口操作相关的最重要的两个POSIX函数可能就是tcgetattr(3)和tcsetattr(3)。顾名思义,这两个函数分别用来取得设设置终端的属原创 2016-06-10 20:40:51 · 3759 阅读 · 0 评论 -
fcntl
repost 转载的 mark 一下转载 2016-06-10 20:29:41 · 475 阅读 · 0 评论 -
关于linux下 gcc 编译时for循环的报错。c99
今天写点程序,声明个人是小白 发现一个没有错的程序一直报错,百思不得其解。看了一下报错信息 恍然大悟erro: for loop initial declaration are only allowed c99 mode故意思是我的for循环形式只是在c99下是允许的 。所以要修改一下我的for循环模式c语言有很多标准 以前的标准不允许for(i原创 2015-10-06 20:31:57 · 5538 阅读 · 3 评论 -
什么是EOF ,如何输入EOF
什么是EOF ,如何输入EOF ,详细解释原创 2015-10-04 19:56:37 · 3154 阅读 · 0 评论 -
typedef struct 小结
1 结构体定义 struct [结构体姓名]{// 里面定义变量等内容}[可选内容];例如struct point{};在使用时可以struct point pt={220,200};这就是多结构 point类型的声明以及初始化,看好形式,切记.struct point{}x ;这个就类似于int x;所以我们就很好理解t原创 2015-10-19 09:09:23 · 417 阅读 · 0 评论