Emacs 快捷键

  最近由于课程要求,不得不开始学习Emacs的使用,开个博客记录一下Emacs痛苦的入门之路,简单记录一下常用的快捷键。持续更新ing…

注:关于Emacs和Vim的区别,这里有一篇很好的文章

Command Shortcut
Open(“visit”) file C-x C-f
Save current buffer(an open file) C-x C-s
Save as [another name] C-x C-w
Quit Emacs C-x C-c
Suspend Emacs C-z
Resume Emacs(when it is suspended) fg
Undo C-_
Set mark(then you can select a region text using your cursor) C-@
Cut(Kill) C-w
Copy M-w
Paste C-y
Page down(up) C-v(M-v)

搜索的功能相信是很多人日常的需求,Emacs当中,我们可以使用内置的isearch进行搜索:

Command Shortcut
Enter isearch mode M-x isearch-forward (then you can enter the keyword)
Jump to next occurrence C-s
Jump to previous occurrence C-r
Exit and place the cursor at origin position C-g
Exit and place the cursor at current position Enter

Valgrind 简介

valgrind实际上是一系列工具的集合,在这里我们主要关注其中的内存检查工具,可以让我们检查程序是否存在内存泄露的问题(如:malloc分配了内存但是没有free,空指针…)

如何使用?

简单的使用valgrind指令来运行你的程序就好valgrind ./myProgram hello 42

期待输出

如果你使用valgrind运行你的程序,你应该期待得到以下的输出:

expected output

常见错误

uninitalized_value

invalidate_read/write

char * str1 = "Hello World";
char * str2 = calloc(cnt * sizeof(* str2));
strcpy(str2, str1);

注意 strcpy 会在字符串的结尾自动添加 \0 , 所以分配内存的时候,你需要为结束符多分配一个内存空间

常用指令

valgrind --track-origins=yes --leak-check=full ./myProgram

MakeFile 简介

在 C 里面,我们使用 gcc 进行编译

CFLAGS=-std=gnu99 -pedantic -Wall -Werror -ggdb3
all: main.o
	gcc -o rand_story $(CFLAGS) main.o
main.o: main.c catarray.h
	gcc -c $(CFLAGS) main.c

.PHONY: clean
clean:
	rm -r rand_story *.o *~

在 C++ 里面,我们使用 g++ 进行编译

CFLAGS= -pedantic -Wall -Werror -ggdb3
all: code.o
        g++ -o code_output $(CFLAGS) code.o
code.o: code.cpp
        g++ -c $(CFLAGS) code.cpp

.PHONY: clean
clean:
        rm -r code_output *.o *~