
漫谈C/C++
文章平均质量分 60
对C/C++编程中的一些难点、怪点,进行解析。
漫谈C/C++语言的特性。
AnSwEr不是答案
Github:https://github.com/AnSwErYWJ
技术博客:www.answerywj.com
展开
-
inline使用注意事项
文章目录GCC在不优化时不会内联任何函数,除非指定函数的“always_inline”属性。先附上结论:GCC在不优化时不会内联任何函数,除非指定函数的“always_inline”属性。测试代码:#include <stdio.h>inline void say(void) { printf("Hello, World\n");}int main(void) { say(); return 0;}使用-O3优化选项,一切正常:$ gcc原创 2021-07-28 14:49:23 · 470 阅读 · 1 评论 -
C语言实现优先级队列——priqueue
C语言实现优先级队列在回顾一个学长的项目时,发现他在串口的多线程操作时不是单纯的使用互斥量在读写操作时来共享串口,而是使用了一个优先级队列,在共享串口的基础上,可以设定读或写命令的优先级来决定命令执行序列。在这里,我来分享这个优先级队列的源代码,虽然自己还不是吃的很透,但是现在这里留下记录,希望下次使用时能更进一步,也欢迎大家在下面讨论,交流。源码:priqueue反馈与建议微博:@AnSwEr不原创 2015-10-22 00:45:46 · 2926 阅读 · 0 评论 -
C语言配置文件解析库——iniparser
C语言配置文件解析库——iniparser前言:在对项目的优化时,发现Linux下没有专门的供给C语言使用的配置文件函数,于是搜索到了iniparser库,可以像那些面向对象语言一样,使用ini文件进行参数配置。介绍iniparser是针对INI文件的解析器。ini文件则是一些系统或者软件的配置文件。iniparser库有三种下载方式: 1. 官方网站 2. 我的github 3. 我的网盘原创 2015-10-22 21:16:49 · 16091 阅读 · 4 评论 -
C语言生成随机数
C语言生成随机数rand函数函数介绍rand()函数是产生随机数的一个随机函数:#includeint rand(void);返回值: rand()返回值为一随机数值,范围在0至RAND_MAX 间(RAND_MAX定义在stdlib.h,其值为2147483647)。 注:在调用此函数前,必须先利用srand()设好随机数种子。如果未设随机数种子,rand()在原创 2015-10-24 21:10:40 · 51155 阅读 · 1 评论 -
Linux C编程的时间函数例程
Linux C编程的时间函数例程前言:本文将介绍一些时间函数,但不会一一解释这些函数,只是提供这些函数所返回的值来方便开发者的使用。time()返回当前时间和日期距1970.1.1 00:00:00经过的秒数。#include<stdio.h>#include<time.h>int main(void){ printf("%lds\n\n",time(NULL)); return原创 2015-10-05 20:25:13 · 866 阅读 · 0 评论 -
linux下C时间编程(1)——时间显示与转换
时间显示: 本文将着重阐述在linux下C开发中实际应用的时间编程的一些方法和技巧,对一些原理性的东西并不进行深入的讨论,如果读者有更深刻的理解,欢迎加入讨论。 在实际C开发中,我们常常需要输出或者让程序显示当前系统时间,例如生成日记文件、游戏开发等等。回想一下,在命令行中我们使用date来实现这一功能,然而在程序中如何实现呢?相信有一些C基础的读者第一时间会想到time()函数。下面原创 2014-12-14 14:54:22 · 4112 阅读 · 3 评论 -
位操作和字符转换的一些小问题
今天做到一道题目,大致是要求是编写一个将二进制字符串转化为数字值的函数。也就是说,如果您有以下语句: char * pbin = "01001001";那么您可以将pbin作为一个参数传送给该函数,使该函数返回一个int值25。其中有一段核心代码,一开始没怎么看懂,所以贴出来讨论一下。while(*pb != '\0') number=(number这里的移位操作相当于这个数乘以2原创 2015-03-15 17:51:13 · 835 阅读 · 1 评论 -
交互式程序的字符读取技巧
在交互式程序中,如果我们只需要读取一个字符,如输入abc,但是我们只需要a。要实现这种特性,需要以下动作:while(getchar() != '\n')continue;/*跳过输入行的剩余部分*/这个循环从输入读取字符,直到出现由回车键产生的换行字符。注意,函数返回值没有被赋值给ch,因此,字符仅被读取并丢弃。因为最后一个被丢弃的字符是换行符,所以下个读入的字符是下一行的首字符。如果原创 2015-03-16 12:37:51 · 1356 阅读 · 1 评论 -
用户交互程序小技巧
当我们需要通过程序向用户获取一个字符命令时,我们可以这样做:scanf("%c",&ch);getchar();后一句的作用是吃掉上一句在IO遗留下来的回车,不然下一次再执行这个语句时,就会首先读取到回车符,而非是用户输入的字符。下面再来讨论以下scanf函数与几个其他IO函数的区别:读取字符时:scanf()以Space、Enter、Tab结束一次输入,原创 2015-03-17 21:07:56 · 776 阅读 · 1 评论 -
C语言实现直角坐标转换为极坐标
需要利用数学库中的数学函数,废话不多说了,直接贴code:#include#include#define RAD_TO_DEG (180/(4*atan(1)))//pi=4*atan(1)typedef struct polar_y{double magnitude;//与极点的距离double angle;//角度}POLAR_V;typedef struct rect原创 2015-03-20 20:56:47 · 15162 阅读 · 6 评论 -
atoi函数的说明与使用
atoi()函数:1.功能:把字符串转换成整型数。2.原型:int atoi(const char *nptr);说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。3.头文件:4.实例:源码:#inc原创 2015-04-03 15:57:38 · 10045 阅读 · 0 评论 -
getch函数的使用与说明
函数名:getch()原型:int getch(void);功能:在windows平台下从控制台无回显地取一个字符,在linux下是有回显的。在linux平台下时(即包含的是curses.h),还应该在使用函数之前使用initscr(),使用完毕之后调用endwin().否则的话不需输入就会返回。返回值:从键盘读取的字符。用法:常用作程序调试结束时,等待调试者按下任意键退出。原创 2015-04-04 14:13:15 · 4614 阅读 · 0 评论 -
system函数的使用与说明
函数名:system()头文件:函数原型:int system(const char * string);功能:system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略原创 2015-04-04 14:18:51 · 4783 阅读 · 0 评论 -
itoa函数的使用与说明
原型:char *itoa( int value, char *string,int radix);value:欲转换的数据;string:目标字符串的地址;radix:转换后的进制数,可以是10进制、16进制等。功能:把一个整数转换成字符串。说明:itoa 并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。标准库中有sprintf,功能比原创 2015-04-04 14:23:20 · 33374 阅读 · 1 评论 -
讨论main函数执行结束后还能在执行一段代码吗?
今晚突然脑中出现了这个问题,于是通过查找一些资料来进行一下解答。要实现这个功能就需要使用atexit()函数,乍一看似乎是和exit()函数有关系,所以我们就先来复习一下exit()函数。exit():通常是用在子程序中用来终结程序用的,使用后程序自动结束,跳回操作系统。main函数结束时也会隐式地调用exit()函数。原型:void exit(int state);sta原创 2015-04-07 22:14:19 · 3213 阅读 · 0 评论 -
protobuf-c学习小结
由于项目的需要,利用了一下午进行了protobuf-c的学习,下面来总结一下。简介:protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布原创 2015-04-10 12:20:29 · 4161 阅读 · 5 评论 -
Linux C编程的DEBUG宏
#if defined(DEBUG_PRINT)#define DEBUG(...)\ do{\ fprintf(stderr,"-----DEBUG-----\n");\ fprintf(stderr,"%s %s\n",__TIME__,__DATE__);\ fprintf(stderr,"%s:%d:%s():",__F原创 2015-08-13 21:36:12 · 3581 阅读 · 0 评论 -
C语言字符指针和字符数组的区别
废话不多说,直接上代码:#includeint main(){ char str[]="hello78"; char *str1="world"; printf("%p\n",str); printf("%p\n",str1); printf("%s\n",str); printf("%s\n",str1); return 0;}原创 2015-06-12 22:08:18 · 3509 阅读 · 0 评论 -
定义字符串的两种方式
定义字符串的两种方式数组定义char name[] = "answer"指针定义char *name = "answer"比较字符串里的字符可以修改,而字符串是一个常量,字符串里面的字符不能修改。>Tips:可以与我的另外一篇文章一起看。http://blog.youkuaiyun.com/u011192270/article/details/46475981原创 2015-08-15 15:38:57 · 8993 阅读 · 0 评论 -
交换两个值的方法
交换两个值的方法1.利用temp变量交换temp=a;a=b;b=a;2.加减法交换b = a - b;a = a - b;b = a + b;3.异或交换a = a ^ b;b = a ^ b;a = a ^ b;原创 2015-08-15 15:56:50 · 935 阅读 · 2 评论