自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (2)
  • 收藏
  • 关注

原创 vscode 调试(linux )

vscode 多进程调试

2023-07-17 19:44:13 2746

原创 工具库2:封装一个进程控制库(linux)

(1)父子进程存在继承关系,即子进程拷贝自父进程;(2)同时运行进程个数可控;

2023-07-12 21:20:01 429

原创 工具库1:封装一个日志库(linux)

(1)封装一个c/c++日志库,提供格式打印接口,编写程序代码时方便使用;(2) 格式打印接口支持可变参数;(3)格式打印接口封装成可变参数宏,便于使用;

2023-07-12 21:07:47 314

原创 问题1:将静态库编译成动态库

问题1:将静态库编译成动态库

2023-07-09 23:27:40 1246

原创 问题3:动态库中类静态成员未定义

动态库中类静态成员未定义问题,解决方案

2023-07-04 23:08:51 159

原创 GCC编译选项简单介绍

关闭编译时的警告信息。

2023-06-26 22:09:48 253

原创 ps常用方法

ps常用方法

2022-06-16 11:35:25 535 1

原创 linux下保存日志文件和屏幕录制小技巧

linux下保存日志文件和屏幕录制小技巧背景1, 在linux环境下,做程序开发,时常需要运行程序,监测运行状态,以便发现异常错误;时常遇到一个程序可能要运行数十小时才能重现一个bug,靠人工实时监测不现实;需要将程序运行过程打印信息记录到日志文件中,以便后期查看验证。2, 在linux环境下,安装软件,想要将安装过程记录下来,以便指导其他人安装,需要做录屏操作。需求分析1,记录程序运行输出文件还是录制软件安装过程,本质上,都是想要录制终端的操作。解决方案1, 录制linux终端的操作可以使用

2021-10-30 16:15:07 1124

原创 并列的字符串被连接成新的字符串

并列字符串被连接成新的字符串在分隔符“,”间的多个字符串分隔符间的多个字符串属于并列关系,在翻译阶段时,多个并列的字符串会被连接到一起,形成新的字符串;c++标准文档引用:String literals placed side-by-side are concatenated at translation phase 6 (after the preprocessor). That is, "Hello," " world!" yields the (single) string "Hel

2021-03-08 17:43:04 244

原创 VMware centos 7 图形界面的分辨率和终端字体大小设置

1,centos 7 图形界面的分辨率设置centos 7窗口打开设置界面Applications–>System Tools–>Settings在设置窗口界面打开设备设置,点击显示设置,选择适合自己系统的分辨率设置,即可完成分辨率设置Devices–>Display–>Resolution2, 终端字体大小设置打开终端的偏好设置界面Edit --> Preferences在偏好设置界面设置字体以及字体大小,至此,完成

2021-03-06 11:30:54 17347 10

原创 编译原理-第一章-引论

编译原理第一章 引论1,概念简介(1) 编译器:一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成为一个等价的、用另一种语言(目标语言)编写的程序。2,一个编译器的结构2.1 分析与综合(1)编译器把源程序映射为在语义上等价的目标程序,映射过程由两个部分组成:分析部分和综合部分。(2)分析部分(analysis)把源程序分解成为多个组成要素,并在这些要素之上加上语法结构,然后,创建该源程序的一个中间表示。​ 分析部分还会收集有关源程序的信息,并把信息存放在

2021-01-19 11:28:51 255

原创 flex与bison编译

flex与bison编译1,flex编译生成头文件和源文件[sbinhuang@fengyi test]$ flex --header-file=flex_calculator.hpp -o flex_calculator.cpp --c++ calculator_example.l其中,–header-file 指定生成头文件名-o 指定生成源文件名–c++ 指定生成c++代码,c代码则无需指定;最后指定flex源文件注意:--c++ 选项存在bug,生成的fl

2021-01-18 18:05:12 2179 1

原创 centos7下安装flex,bison

centos7下安装flex,bison1,修改镜像源为国内镜像源,比如阿里云(1)首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo[root@fengyi flex]# cp /etc/yum.repos.d/CentOS-Base.repo /home/fengyi/Destop(2)进入yum源配置文件所在的文件夹[root@fengyi flex]# cd /etc/yum.repos.d/(3)下载阿里云源文件作为新的yum源配置文

2021-01-08 11:41:16 8873 3

原创 宏定义(define)和可变参数函数(variable arguments)

宏定义(define)和可变参数函数(variable arguments)1,宏定义(define)宏定义是在编译时对程序进行文本替换,在宏定义替换过程中,只有字符串替换操作,没有运算操作宏定义分两种,一是普通的无参数宏定义;二是带实参的宏定义;(1) 无参数宏定义#define 宏名(标识符) 替换的文本范例:#define PI 3.14double i = PI; --> 编译时,替换 double i = 3.14;#define N 5#def

2020-12-04 11:36:03 5346

原创 shell read读取文件最后一行数据缺失处理

1,read 读取文件(1) read按行读取文件(2)read读取文件,若文件最后一行不带有换行符’\n’,则最后一行读取后,不处理,跳出while循环;(3)判断读取文件的最后一行是否有内容,有内容则处理;[[ -n ${Line} ]]2,范例while read Line || [[ -n ${Line} ]]do echo ${Line} >> otherfiledone < fileName复制代码...

2020-10-27 09:56:27 2412 2

原创 makefile简单使用

Makefile2020.9.111,makefile规则三要素目标,依赖项,命令2,自动变量<依赖目标中的第一个目标名字,如果依赖目标是以模式(< 依赖目标中的第一个目标名字,如果依赖目标是以模式(%)定义的,那么<依赖目标中的第一个目标名字,如果依赖目标是以模式(<将是符合模式的一系列的文件集。 注意,其是一个一个取出来的$@ 规则中的目标$^ 规则中的所有依赖3,常用变量名称CC 即gccAPPFLAGS 预处理时使用的选项CFLAGS 编译时

2020-10-13 17:24:05 312

原创 gcc(g++)编译器版本不同导致的报错

gcc(g++)编译器版本不同导致的报错# 2020.10.131,查看编译器版本信息/* linux 环境下 */gcc --versiong++ --version2,查看库中使用的默写变量或参数未定义报错信息举例:./precompiler-linux:/lib64/libc.so.6:version 'GLIBC_2.14' not found (required by ./precompiler-linux)/* linux 环境下 *//* 查看报错库的描述信息,确定

2020-10-13 17:18:42 1679

原创 04 c++ 类数据成员的地址和类对象数据成员的地址

2020年10月4日1,类数据成员和类对象数据成员地址的区别(1) 类定义是一种类型声明,存在于代码块中,并没有分配内存空间;对类的数据成员取地址,得到的是类的数据成员在类内的相对偏移量;(2) 类的对象是类的实例化,分配内存空间给实例化对象使用,类的对象的数据成员取地址,得到的是类的对象的数据成员在内存空间的实际地址;#include <iostream>#include <cstdio>using namespace std;class A{public:

2020-10-04 16:04:52 3028

原创 c++函数参数默认值设置

c++函数参数默认值设置1,函数参数默认值在函数声明的参数列表上定义,函数定义不变;#include <iostream>using namespace std;int add(int a = 0, int b = 0, int c = 0);int main(){ std::cout << add(1, 2, 3) << std::endl; getchar(); return 0;}int add(int a, int b, int c)

2020-09-08 14:03:46 8540

原创 001 新概念第一册第一课笔记

lesson 0012020.8.31一、单词讲解1,excuse原谅(1) excuse me对不起,打扰了借过一下,让一让失陪了请再说一遍(未听清对方的话时)2,me我(1) 主格:I(2) 宾格:me(3) 语法拓展简单句的句型结构:主 + 谓主 + 谓 + 宾主 + 谓 + 宾 + 宾主 + 谓 + 宾 + 宾补主 + 系 + 表主 + 谓 + 宾 和 主 + 系 + 表 的区分:主 + 谓 + 宾 I l

2020-09-02 23:43:38 676

原创 04 shell 参数传递和带空格的参数处理

04 shell 参数传递和带空格的参数处理2020.8.61 shell参数传递2 shell带空格的参数处理(1) 解决方案一:采用"$@"格式,将传入的参数一个个都附加上双引号返回,则包含空格的参数也会被当做一个字符串处理"$@"返回值格式:"$1" "$2" "$3" ... "$n"格式:function add (){ ... }add "$@"范例:#!/bin/bashfunction test1 (){ echo "test1 param_a

2020-08-07 00:09:18 2291

原创 03 C++之引用

03 C++之引用2020.8.21 引用(1) 将新标识符和旧标识符绑定的对象绑定在一起,一旦绑定不可以更改,因此,也成为旧标志符别名;(2) 在定义时使用&符号将标识符和对象绑定,新标志符和绑定对象需类型一致;范例:int a = 10;int &new_a = a;std::cout << "new_a:" << new_a;result:[root@promote test]# ./quote new_a:10(3) 引用和指针辨

2020-08-02 22:36:00 63

原创 01 初识C++

01 初识C++2020.7.141 第一个IO文件(1) 范例:#include<iostream>int main(){ std::cout << "Enter two numbers:" << std::endl; int v1 = 0, v2 = 0; std::cin >> v1 >> v2; std::cout << "The sum of " << v1 <&

2020-08-02 22:04:14 164

原创 02 常量和字面值辨析

02 常量和字面值辨析目录# 2020.8.21 常量(1) 在C/C++语言中常量就是在程序运行过程中不允许更改的量;常量分三种:一是立即数(直接量,如1,2,3,a,b等等),存储在代码段空间,不允许访问其地址,无法获取存储空间地址,可以直接使用;二是符号常量,被const所修饰的变量,它存储在变量存储空间,但只能通过它来访问其存储的值,不允许修改,可以获得其存储空间地址;三是字符串常量,存储在一段特别的数据空间,与变量存储空间不同,不允许修改,但可以通过指针获取存储空间地址;范例

2020-08-02 11:42:33 537

原创 03 tcl提取文件路径操作

03 tcl提取文件路径操作1 设置和拆分文件路径(1) 设置文件路径名格式:file join dirlistdirlist : 路径元素列表,以空格隔开;返回值:返回dirlist 元素以(== ‘/’==)间隔开的路径名;范例:% set path [file join tcl program filename.tcl] tcl/program/filename.tcl% puts $pathtcl/program/filename.tcl(2) 拆分文件路径名,生成

2020-08-01 17:15:09 7470

原创 01 环境变量IFS使用和误区

1 环境变量IFS(1) 环境变量IFS(Internal Field Separator):内部范围分隔符用来将字符串按照指定格式分隔成一个个子串;read 读取数据时,按照IFS分隔符将数据分隔;(2) IFS是一个局部环境变量[fengyi@localhost ~]$ env |grep IFS[fengyi@localhost ~]$ set |grep IFSIFS=$' \t\n' local option option2 i IFS=' IFS='

2020-07-31 22:27:43 559

原创 02 C/C++创建tcl自定义命令

1 自定义命令(1)编写自定义命令1 编写自定义命令内容2 注册指定命令/* *set up numbers sort command */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <tcl.h>// numbers sortint NumSort(ClientData ClientData, Tcl_Interp *Interp, int

2020-07-12 23:39:26 1227

原创 01 linux 下tcl源码编译安装和tcl手册使用

标签(空格分隔): 源码编译安装2020.7.71 下载安装包.tar.gz2 解压压缩包3 进入configure文件所在文件夹,执行./configure./configure注解:./configure 用来生成Makefile文件,为编译做准备4 执行make,编译源文件生成可执行文件make5 执行make install进行安装,需要在root权限下执行make install...

2020-07-12 23:35:15 1470

原创 04 tcl入门学习

tcl 入门学习2020.7.121 set(1) 用途:用来设置或改变一个变量的值(2) 格式:set varName varValue(3) 范例:set tmp "Hello world!"puts tmp

2020-07-12 23:29:46 125

原创 pycharm安装lxml库的错误解决方案

pycharm安装lxml库的错误解决方案目录一、安装lxml的两种方式pycharm终端打开终端安装wheelpip install wheel安装packager lxmlpip install package lxml安装lxmlpip install lxmlpycharm虚拟环境转链接地址添加链接描述...

2020-04-20 13:04:39 3452

编译原理-第一章-引论.pdf

编译原理 第一章 引论 学习笔记

2021-01-19

tcl 入门学习.md

## 1 自定义命令 (1)编写自定义命令 > 1 编写自定义命令内容 > 2 注册指定命令 ```tcl /* *set up numbers sort command */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <tcl.h> // numbers sort int NumSort(ClientData ClientData, Tcl_Interp *Interp, int objc, Tcl_Obj *const objv[]) { double arr[objc], tmp; char *pstr, *pstr2; char buf[100]; int cnt = 1, cnt2 = 0, i = 0; //1. string convert number,numbers sort for(cnt = 1; cnt < objc; ++cnt) { //1.1 string convert number tmp = atof(Tcl_GetString(objv[cnt])); //1.2 numbers sort if(cnt == 1) arr[0] = tmp; else { for(cnt2 = cnt-1; cnt2 > 0; --cnt2) { if(tmp >= arr[cnt2 -1]) { arr[cnt2] = tmp; break; } else arr[cnt2] = arr[cnt2 -1]; } } } //2. numbers convert string and return for(cnt2 = 0; cnt2 < objc -1;++cnt2) { Tcl_AppendResult(Interp,gcvt(arr[cnt2], sizeof(arr[cnt2]), buf), " ",NULL); } return 0; } int Numsort_Init(Tcl_Interp *Interp) { //login command Tcl_CreateObjCommand (Interp, "numsort", NumSort, 0, 0); return TCL_OK; } ``` > 注解: (1)初始化函数Init的名字必须是文件名首字母大写+"_Init",上文c文件名是numsort.c, 故初始化函数名为Numsort_Init; ## 2 编译生成动态库 (1) 格式: gcc -fPIC -shared ____.c -o lib____.so ``` $ gcc -fPIC -shared numsort.c -o libnumsort.so ``` > 注解: (1) ____.c 代表要进行编译的C文件名 (2)lib___是lib+C文件名,生成动态库的库名为lib__.so ## 3 加载动态库 (1) 格式: load libname ```tcl % load libnumsort.so ``` ## 4 调用自定义命令 (1) commondname args ```tcl % numsort 1 1.1 2 2.2 22 3.3 90 2.5 11.11 1 1.1 2 2.2 2.5 3.3 11.11 22 90 ``` ## 1 自定义命令 (1)编写自定义命令 > 1 编写自定义命令内容 > 2 注册指定命令 ```tcl /* *set up numbers sort command */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <tcl.h> // numbers sort int NumSort(ClientData ClientData, Tcl_Interp *Interp, int objc, Tcl_Obj *const objv[]) { double arr[objc], tmp; char *pstr, *pstr2; char buf[100]; int cnt = 1, cnt2 = 0, i = 0; //1. string convert number,numbers sort for(cnt = 1; cnt < objc; ++cnt) { //1.1 string convert number tmp = atof(Tcl_GetString(objv[cnt])); //1.2 numbers sort if(cnt == 1) arr[0] = tmp; else { for(cnt2 = cnt-1; cnt2 > 0; --cnt2) { if(tmp >= arr[cnt2 -1]) { arr[cnt2] = tmp; break; } else arr[cnt2] = arr[cnt2 -1]; } } } //2. numbers convert string and return for(cnt2 = 0; cnt2 < objc -1;++cnt2) { Tcl_AppendResult(Interp,gcvt(arr[cnt2], sizeof(arr[cnt2]), buf), " ",NULL); } return 0; } int Numsort_Init(Tcl_Interp *Interp) { //login command Tcl_CreateObjCommand (Interp, "numsort", NumSort, 0, 0); return TCL_OK; } ``` > 注解: (1)初始化函数Init的名字必须是文件名首字母大写+"_Init",上文c文件名是numsort.c, 故初始化函数名为Numsort_Init; ## 2 编译生成动态库 (1) 格式: gcc -fPIC -shared ____.c -o lib____.so ``` $ gcc -fPIC -shared numsort.c -o libnumsort.so ``` > 注解: (1) ____.c 代表要进行编译的C文件名 (2)lib___是lib+C文件名,生成动态库的库名为lib__.so ## 3 加载动态库 (1) 格式: load libname ```tcl % load libnumsort.so ``` ## 4 调用自定义命令 (1) commondname args ```tcl % numsort 1 1.1 2 2.2 22 3.3 90 2.5 11.11 1 1.1 2 2.2 2.5 3.3 11.11 22 90 ```

2020-07-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除