
C语言
EthanYYYY
大才非学不成
展开
-
c语言定义函数时形参定义的位置
今天在读Zlib库源码中第三方contrib/minizip文件时,发现一个有意思的东西:定义函数时,其形参的类型放在函数()后面,()里只放了形参名虽然这样最终用编译器(如gcc等)编译时是可以通过的,但是在IDE中,却会提示语法错误。而通常我们在定义函数时,形参的定义是放在函数的()中的。那么上面的那种做法,是不是只是方便对形参进行注释?...原创 2020-04-02 20:00:14 · 3442 阅读 · 0 评论 -
【C/C++】宏定义中 #、##、__VA_ARGS__和##__VA_ARGS__的作用
#define INFO(fmt, ...) \ if (ctx->enable_verbose) \ printf("INFO: %s(): (line:%d) " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__);#define WARN(fmt, ...) \ printf("WARN: %s(...原创 2019-03-27 23:22:57 · 2450 阅读 · 0 评论 -
std::ostringstream的用法
原文:ostringstream的用法 使用stringstream对象简化类型转换为什么要学习进入stringstream你的编译器支持吗?string到int的转换重复利用stringstream对象在类型转换中使用模板结论一些实例例子一:基本数据类型转换例子 int转string例子二:除了基本类型的转换,也支持char *的转换。例子三:再进行多次转换的时候,必须调用stringstre...转载 2019-04-09 09:14:02 · 12533 阅读 · 0 评论 -
【C语言】S_ISDIR S_ISREG等常见的几个宏
常见的几个宏struct stat数据结构stat函数通过路径通过文件描述符常见的几个宏S_ISLNK(st_mode) // 是否是一个连接.S_ISREG(st_mode) // 是否是一个常规文件.S_ISDIR(st_mode) // 是否是一个目录S_ISCHR(st_mode) // 是否是一个字符设备.S_ISBLK(st_mode) // 是否是一个块设备S_ISF...原创 2019-04-22 21:17:10 · 7409 阅读 · 0 评论 -
v4l2的学习建议和流程解析
转自: https://www.cnblogs.com/silence-hust/p/4464291.html 一、Video for Linux two二、v4l2结构体介绍1、常用的结构体在内核目录include/linux/videodev2.h中定义2、常用的IOCTL接口命令也在include/linux/videodev2.h中定义三、调用v4l2的工作流程上各种找资料后,才发现其实...转载 2019-04-22 20:29:40 · 841 阅读 · 0 评论 -
【IO多路复用】 select总结
原文: http://www.cnblogs.com/Anker/archive/2013/08/14/3258674.html 1、基本概念2、select函数3、测试程序1、基本概念IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:(1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。(2)当一个...转载 2019-04-23 09:55:58 · 180 阅读 · 0 评论 -
【IO多路复用】 poll总结
原文:http://www.cnblogs.com/Anker/archive/2013/08/15/3261006.html 1、基本知识2、poll函数3、测出程序1、基本知识poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含...转载 2019-04-23 20:16:53 · 242 阅读 · 0 评论 -
【IO多路复用】 epoll总结
原文: 1、基本知识2、epoll接口3、工作模式4、测试程序1、基本知识epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口epoll...转载 2019-04-23 21:23:46 · 248 阅读 · 0 评论 -
【glib】Key-value文件解析器
1 头文件2 描述3 API4 实例4.1 本文Key-value文件解析器如下:4.2 在准备一个Key-value文件示例文件 tt.txt4.3 编译:4.4 运行:4.5 运行结果输出如下:glib源码glib帮助文档本文主要参考:glib-Key-value-file-parser本节主要讲解Key-value文件解析器,可以轻松的帮我们实现配置文件的解析,类似于.ini文件...原创 2019-07-27 22:12:53 · 1185 阅读 · 0 评论 -
【glib】标准化程序的命令行解析 GOptionEntry
最近发现了一个好东东,glib 库中的 GOptionEntry,用于解析应用程序的命令行参数话不多说,先上个栗子:// test.c#include <glib.h>#include <locale.h>static gint repeats = 2;static gint max_size = 8;static gboolean verbos...原创 2019-07-27 16:45:28 · 1953 阅读 · 0 评论 -
Linux Qt下报/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: No such file or directory 错误
现象最近在Ubuntu下写了个小程序,运行后老是报如下错误:/usr/include/c++/7/cstdlib:75:15: fatal error: stdlib.h: No such file or directory #include_next <stdlib.h>原因:查找资料了解到:这是由于gcc7已经吧stdlib.h纳入了libstdc++以进行更好的优...原创 2019-09-09 09:13:01 · 6426 阅读 · 0 评论 -
Ubuntu 16.04 中 QT creator 运行CUDA程序的配置
这里写自定义目录标题实验环境实例kernel.cukernel.hmain.cpppro文件的配置运行结果其他实验环境Ubuntu 16.04 + Qt5 + CUDA9.0实例kernel.cu// kernel.cu#include <cuda_runtime.h>#include <stdio.h>extern "C" void runCudaPa...原创 2019-03-27 22:34:36 · 2462 阅读 · 1 评论 -
C语言:可变参数宏以及##和#符的使用
在阅读Linux内核代码时,经常会看到如下的宏定义,它们叫做可变参数宏,下面我们就来聊聊可变参数宏的用法。首先点一下带参宏定义的一般形式为:#define 宏名(形参表) 字符串带参数的宏调用一般形式为:宏名(实参表) 1. #的使用在C语言的宏中,#的功能就是将字符串中的宏参数进行字符串转化操作,简单说就是在将字符串中的宏变量原样输出并在其左右原创 2017-12-20 21:35:21 · 1360 阅读 · 0 评论 -
C语言函数printf(“%*.*s“,2,4,“abcdefg“);的解释
C语言中,格式输出函数printf的一般使用形式为:printf(“格式控制字符串”,输出项列表);而格式说明部分的形式是:%[flags] [width] [.precision] [F|N|h|l] type各部分说明如下:flag而在 printf("%*.*s",2,4,"abcdefg");中,* 表示不定长度,其值由第2项和第3项决定。在这里原创 2017-12-05 10:29:27 · 1617 阅读 · 2 评论 -
iMX6引脚配置的寄存器使用方法总结
平台: OKMX6Q-S系统: Linux内核版本:linux-3.0.35Datasheet:IMX6DQRM.pdf i.MX 6Q包含有限数量的引脚,其中大部分具有多个信号选项。这些信号到引脚和引脚到信号的选项由输入输出多路复用器IOMUX选择。IOMUX还用于配置其他引脚特性,例如电压电平,驱动强度和滞后。在IMX6DQRM.pdf中的第4章ExternalSignals and Pi...原创 2018-02-11 11:17:18 · 6785 阅读 · 0 评论 -
【C/C++】多维向量vector
1 一维vector关于一维的vector的知识点,网上教程很多,这里不在详细介绍。本文只提供一个例程,仅供参考。// test_vector1D.cpp#include <iostream>#include <string>#include <vector>using namespace std;void vector_1D(){...原创 2018-11-27 14:42:34 · 10915 阅读 · 0 评论 -
【C/C++】多线程中的几种锁
线程之间的锁有:互斥锁、条件锁、自旋锁、读写锁、递归锁。一般而言,锁的功能越强大,性能就会越低。1 互斥锁互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。也就是说是为了避免多个线程在某一时刻同时操作一个共享资源。例如线程池中的有多个空闲线程和一个任务队列。任何是一个线程都要使用互斥锁互斥访问任务队列,以避免多个线程同时访问任务队列以发生错乱。在某一时刻,只有一个线程可以获...转载 2018-11-27 15:47:40 · 11758 阅读 · 0 评论 -
C和C++混合编程 (__cplusplus 与 external "c" 的使用)
转自:http://blog.youkuaiyun.com/ljfth/article/details/3965871第一种理解比如说你用C++开发了一个DLL库,为了能够让C语言也能够调用你的DLL输出(Export)的函数,你需要用extern "C"来强制编译器不要修改你的函数名。通常,在C语言的头文件中经常可以看到类似下面这种形式的代码:#ifdef __cplusplusexte...转载 2019-02-28 18:26:08 · 680 阅读 · 0 评论 -
【C++】类的静态成员
静态成员变量在C++中,可以使用static关键字来把类成员定义为静态的。当类的成员被声明为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本,静态成员是属于整个类的而不是某个对象。静态成员可以通过双冒号来使用,即<类名>::<静态成员名>。静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为...原创 2019-03-05 21:40:22 · 287 阅读 · 0 评论 -
【C++】拷贝构造函数详解
转自:https://www.cnblogs.com/alantu2018/p/8459250.html1 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=100;int b=a;而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include<iostr...转载 2019-03-06 21:24:48 · 681 阅读 · 0 评论 -
【C】pthread_mutex_t 和 pthread_cond_t 配合使用的简要分析
原文:https://blog.youkuaiyun.com/chengonghao/article/details/517792791 原理假设有两个线程同时访问一个全局变量 n,这个全局变量的初始值等于0。Int n = 0 ;消费者线程 A 进入临界区,访问 n,A 必须等到 n 大于 0 才能接着往下执行,如果 n== 0,那么 A 将一直等待。...转载 2019-03-25 22:53:26 · 1033 阅读 · 0 评论 -
【Qt】Qt Creator的安装及创建C项目示例
开发需要,安装了Qt Creator。我电脑装的是Windows10和Ubuntu 16.04 LTS双系统,ARM开发板烧录Ubuntu 16.04系统。下面我将介绍Qt Creator分别在这Windows10和Ubuntu 16.04 LTS系统下的安装流程,及相关配置,并创建C项目示例。其它系统应该相同!首先介绍在Ubuntu 16.04 LTS系统下安装Qt Creator的流程。...原创 2017-12-06 15:46:45 · 23102 阅读 · 0 评论