ysbbs

Let's start BB !


  • 首页

  • 归档

  • 关于

  • 标签

我的Vim使用笔记

发表于 2019-06-10 | | 阅读次数
  • 查看宏定义:[d

  • o,是现在光标坐在行的下方插入新行;

vim 直接查看man 手册

移动到要看到函数上,

命名模式下大写K,即:shitf+k

如果要指定章节,比如printf第三节,为3K

系统剪切板粘贴进VIM

直接在输入模式按Shift+Inset(粘贴)

“+Y 复制当前行到系统剪切板
“+nY 复制当前行往下 n 行到系统剪切板
“+p 粘贴系统剪切板内容到当前位置后

其它

阅读全文 »

GO语言学习笔记4——特色的部分

发表于 2019-06-09 | | 阅读次数

内置函数

  • close

    • 主要用来关闭channel
  • len

    • 用来求长度
    • string,array,slice,map,channel
  • new

    • 用来分配内存,主要用来分配值类型,比如int、struct
    • 返回的是指针
  • make

    • make不仅是分配内存,而且进行了初始化
    • 用来分配内存,主要用来分配引用类型,比如chan,map,slice
    • 返回的就是实体,不是指针
    • s := make([]int,10)
      • make不仅分配了内存,而且进行了初始化
  • append

    • 用来追加元素到数组,slice中

    • 1
      2
      3
      var a[]int
      a = append(a,10,20,11)
      a = append(a,a...) //将a 追加到 a后
      • …是可以将slice展开
  • panic和recover

    • 用来做错误处理
阅读全文 »

GO语言学习笔记3——语句函数

发表于 2019-06-09 | | 阅读次数

goland函数特点

  • 不支持重载,一个包不能有两个名字一样的函数
  • 函数是一等公民,函数也是一种类型,一个函数可以赋值给变量
  • 匿名函数
  • 多返回值

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
import "fmt"
func add(a,b int) int{
return a+b
}
func main(){
c:=add
fmt.Println(c) //函数地址
fmt.Println(add)//函数地址
sum :=c(19,20)
fmt.Println(sum)
}
阅读全文 »

GO语言学习笔记2——常用包使用

发表于 2019-06-09 | | 阅读次数

包的使用实际上在官网有详细的文档,但是首先要熟悉一下GO有哪些常用的包,也避免偶尔绕路。

包

  • golang官网有150标准包,几乎覆盖所有基本库

  • github 包

    • 安装github包: go get github.com/xxxx/xxxx

strings和strconv使用

  • strings.HasPrefix(s string, prefix) bool
    • 判断字符串是否以prefix开头
    • 例如判断url是否以http://开头,如果不是则加上
  • strings.HasSuffix(s string, suffix string)bool
    • 判断字符串s是否以suffix结尾
    • 例如判断一个路径是否以“/”结尾,如果不是,则加上/
  • strings.Index(s string, str string) int
    • 判断str在s中首次出现的位置,如果没有出现,则返回-1
  • strings.LastIndex(s string, str string) int
    • 判断str在s中最后出现的位置,如果没有出现,则返回-1
  • strings.Replace(str string, old string, new string, n int)
    • 字符串替换
  • strings.Count(str string, substr string) int
    • 字符串计数
  • strings.Repeat(str string, count int) string
    • 重复count次str
  • strings.ToLower(str string)string
    • 转为小写
  • strings.ToUpper(str string) string
    • 转为大写
  • strings.TrimSpace(str string)
  • 去掉首位空白字符
  • strings.Trim(str string, cut string)
  • 去掉首位cut字符
  • strings.TrimLeft(str string, cut string)
  • 去掉字符串首cut字符
  • strings.TrimRight(str string, cut string)
  • 去掉字符串尾cut字符
  • strings.Field(str string)
  • 返回str空格分隔的所有子串的slice
  • strings.Split(str string, split string)
    • 返回以split str分隔的所有子串的slice
  • strings.Join(s1 []string, sep string)
    • 用sep把s1中所有的元素链接起来
  • strconv.Itoa(i int)
    • 把一个整数i转成字符串
  • strconv.Atoi(str string)(int, error)
    • 把一个字符串转成整数
阅读全文 »

GO语言学习笔记1——总览

发表于 2019-06-09 | | 阅读次数

GO语言做网络并发服务确实有自己的优点,毕竟网络IO的速率是远远小于CPU的速率,GO这种自带协程的语言方便我们编写出高并发的程序,绝不让CPU闲着,为用户提供高并发的服务。。。

而且GO作为现代语言,提供的包和内置函数使用起来都十分方便,值得一学。

这段时间学习GO语言,把笔记整理了一下,持续更新…

阅读全文 »

一次g++链接问题debug笔记

发表于 2019-06-06 | | 阅读次数

问题描述

在编译时遇到:

1
2
3
4
5
undefined reference to `xxxx'
undefined reference to `xxxx'
undefined reference to `xxxx'
undefined reference to `xxxx'
collect2: error: ld returned 1 exit status

但检查发现不是头文件未包含,和未链接导致的错误,

错误原因挺有意思,记录之。

debug过程

  • 第一反应是没有把库链接上
    • 所以检查Makefile
    • $(CXX) $(CFLAGS) $(LIB) -o $@ $^
    • $(LIB)里链接上了需要的库
  • 故检查头文件
    • 确认包含了头文件
    • 头文件在makefile中也正确
    • 并且undefined reference to `NS_XXXX:XXXX’
      • 在g++错误提示里带上了命名空间,这部分都是在头文件里声明的,所以说明头文件正确包含了
  • 怀疑库有问题?
    • 网络上建议我用nm命令查看so的符号表,看看这个函数是否正常,于是nm -D 库文件,查看了下,结果函数正常的,包含了提示的那些接口。
    • 说明库是没问题的
  • 那就还是链接问题
    • 怀疑是库路径不对,或者gcc没找到正确的库??
      • 尝试改动makefile,
      • 链接一个无关的不存在的库 -lxxx
        • 编译提示找不到库
        • 说明,如果库不存在,或路径里找不到,都会报找不到库的错
  • 将链接的那个库去掉,不链接了
    • 发现报错没有变
    • 说明这个库压根 就没有链接上
    • 虽然命令写对了,路径也是对的,但g++编译时就是没有链接上这个库
  • 问题定位了,google之,虽然之前也google,但是问题没有定位准确,google也是出不来正确的结果
    • “c++ 链接动态库 报错,没链上”
    • 得到答案:
    • 相同的链接库链接时的编译命令,在不同的Linux平台下的不同的gcc版本下表现出不同的效果。它们的代码是一样的,链接的库都是一样的,命令也是一样的,一个是链接成功,而另一个是报错,提示有未定义的引用,即”undefined reference to xxxx”。这类问题报错一般是缺少链接库提示的,只要添加上-lxxx添加上了libxxx即可解决,最多再添加-L/path/to/lib添加正确的搜索库的路径,但我遇到的情况还是不能解决。其实,提示“未定义的引用”说明具有这个函数定义的库没有链接成功,仔细排查后发现,在某些gcc版本下,原来这个居然和链接库在编译或链接的命令中的位置是有关系的。
  • 原因就是,-lxxx这个指令放在了test_gcc.c的前面,对于Redhat的高版本的gcc,这个是没有问题的,而对于Ubuntu下的较低版本的问题,就出现问题,必须将链接的库放在需要链接的对象(xxx.c或xxx.o)的后面,gcc才能正确的去链接,编译命令改为:
    gcc test_gcc.c -lxxx
    这样就都没有问题了,所以在编写Makefile或者写编译链接命令时,均把链接库写在后面就可以保证兼容了。
阅读全文 »

vim阅读代码神器ctags

发表于 2019-06-04 | | 阅读次数

首先确认是否安装了ctags

ctags --help

使用

方法一

一、进入代码目录,创建tags,例如进入代码目录src下,

执行

ctags ./*.cpp ./*.h -R

没有提示即创建成功,在目录下会多一个tags目录。

二、配合vim使用

vim打开代码文件,对某个函数执行ctrl+],即可跳转到对应文件此函数的定义,

执行ctrl+t或Ctrl + o,退回原来的位置。

如果当前光标下是个局部变量,在Vim命令模式下执行命令 gd 就可以跳转到这个局部变量的定义处

另外

在vim内,[+d可以查看某宏定义

C宏定义小记

发表于 2019-06-04 | | 阅读次数

由一段宏定义代码开始:

1
2
3
4
5
6
7
#define SPP_LOG_ERR(fmt, args...) do{\
SPP_SERVERBASE->log_.LOG_P(tbase::tlog::LOG_ERROR, "[%d][%s:%s:%d][LOG_ERROR]"fmt"\n",g_pid,__FILE__,__FUNCTION__,__LINE__, ##args);\
}while(false)
#define SPP_LOG_DBG(fmt, args...) do{\
SPP_SERVERBASE->log_.LOG_P(tbase::tlog::LOG_DEBUG, "[%d][%s:%s:%d][LOG_DEBUG]"fmt"\n",g_pid,__FILE__,__FUNCTION__,__LINE__, ##args);\
}while(false)
阅读全文 »

Shell编程笔记

发表于 2019-06-03 | | 阅读次数

基本介绍

shell分为shell控制台中使用的语句和shell脚本语法。

shell脚本编程本身语法和使用并不复杂,记不清楚也可以随时google,关键是熟练使用shell命令,只有熟练使用shell命令,组合出来的shell脚本才会更有效强大。。

阅读全文 »

Source insight使用笔记

发表于 2019-06-03 | | 阅读次数

日常使用source insight, 记录下这些常用的设置和快捷键方式。

系统库函数文件导入

以添加Linux系统库文件到Source Insight base同级目录为例:

一、库文件拷贝

1、使用tar压缩文件
sudo -s
cd /usr
tar -zcvf include.tar.gz ./include/

2、将压缩文件复制到windows下,解压文件

3、将include文件放到指定位置,如:

1
C:\Users\win 10\Documents\Source Insight 4.0\Projects\include

二、Source Insight添加路径

1、打开Base项目(注:这里不打开Base项目依然可以)

1
Project->Open Project ,选择Base项目

2、Options->Preferrnces,选择Sysbol Lookups选项卡

3、打开Import Symbols for All Projects

4、打开右侧Add按钮,弹出Add External Symbols对话框

5、打开Import from an INCLUDE path (如果不是INCLUDE,导入的是代码中的符号,那就选 from source tree)

6、将需要添加的系统库函数头文件所在路径添加进去

1
C:\Users\win 10\Documents\Source Insight 4.0\Projects\include

7、点击OK

1
2
3
Windows库文件路径,一般在安装VC、vs路径下的VC/include
Linux库文件路径,一般在/usr/include 。

原文:https://blog.csdn.net/qq_23122031/article/details/84888833

源代码符号文件导入

按上面操作,

5、就选 from source tree 选择源代码文件目录导入,导入的是代码中的符号。

6、选择源代码目录添加进行,点OK

7、代码比较多,有点慢。

快捷键总结

  • ctrl+{,ctrl+} ,即ctrl+shift+[],去找对应大括号
  • 找对应小括号是ctrl+9,0
  • F8:高亮当前单词
  • Ctrl+I:插入一个新行
  • F9:行向左缩进
  • F10:向右缩进

选中高亮

Options——File Type Options——Editing Option 全勾上,除了show page breaks

解决自动缩进

1
新开一个PROJECT后,点Options-Document Options,弹出对话框后先在左上角选好要用的Document Type,主要就是设C Source File和C++ Source File,选好后点右边中间的Auto Indent调整缩进。单选里一定要点Smart,右边有两个复选框Indent Open Brace和Indent Close Brace,把两个复选框都取消掉。然后点OK.

缩进与TAB

1. Options菜单Document Options Editing Options框中,tab width= 4 Editing Options框中,勾选Expand tabs(这样,按tab键、等价于输入4个空格)在严格的编码规范中不可以使用Tab,要使用空格。这个是节省工作的符合编码规范的好方法。

2. Options菜单Document Options选择合适的文件类型点击右边中间的Auto Indent钮在弹出的框中,左边选中点Simple。这样在输入函数回车后”{“不会缩进,而是和函数名称对齐。

智能重命名

Ctrl+’

可以使一个函数或者变量统一被替换成新名字

快捷键设置

Options——key assignments

设置comment lines:shift+/

Un-comment lines:shift+.

搜索

  • 普通搜索
    • ctrl+F
  • 文件搜索
    • Ctrl+shift+F
123…11
Yang Shuai

Yang Shuai

105 日志
89 标签
© 2021 Yang Shuai
由 Hexo 强力驱动
主题 - NexT.Mist