Skip to content

Files

Latest commit

8284d54 · Jul 11, 2019

History

History
104 lines (66 loc) · 2.98 KB

5.md

File metadata and controls

104 lines (66 loc) · 2.98 KB

编程技巧,第 1 部分

原文:https://github.com/angrave/SystemProgramming/wiki/Programming-Tricks%2C-Part-1

使用cat作为 IDE

谁需要编辑? IDE?我们可以使用cat!您已经看到cat用于读取文件的内容,但它也可用于读取标准输入并将其发送回标准输出。

$ cat
HELLO
HELLO 

要完成从输入流中读取,请按CTRL-D关闭输入流

让我们使用cat将标准输入发送到文件。我们将使用'>'将其输出重定向到文件:

$ cat > myprog.c
#include <stdio.h>
int main() {printf("Hi!");return 0;} 

(注意!不允许删除和撤消...)完成后按CTRL-D

使用perl正则表达式编辑代码(又名“记住你的 perl 馅饼”)

如果要更改多个文本文件(例如源代码),则使用正则表达式是一个有用的技巧。 perl使得编辑文件非常容易。记住'perl pie'并在网上搜索......

一个例子。假设我们要在当前目录的所有.c 文件中将序列“Hi”更改为“Bye”。然后我们可以编写一个简单的替换模式,它将在所有文件中的每一行上执行:

$ perl -p -i -e 's/Hi/Bye/' *.c 

(如果你弄错了,不要惊慌,原始文件仍然存在;他们只有扩展名.bak)显然你可以用正则表达式做更多的事情而不是改变 Hi 到 Bye。

使用你的 shell !!

要重新运行最后一个命令,只需键入!!并按return重新运行以 g 类型!g开头的最后一个命令,然后按return

使用你的 shell &&

厌倦了运行makegcc然后运行程序,如果编译正常?相反,使用&amp;&amp;将这些命令链接在一起

$ gcc program.c && ./a.out 

Make 可以做的不仅仅是制作

您也可以尝试在 Makefile 中添加一行以进行编译,然后运行您的程序。

run : $(program)
        ./$(program) 

然后跑

$ make run 

将确保您所做的任何更改都已编译,并一次运行您的程序。也适合一次测试多个输入。虽然您可能只想为此编写常规 shell 脚本。

你的邻居太高效了吗? C 预处理器救援!

使用 C 预处理器重新定义常用关键字,例如

#define if while

Protip:将此行放入标准包含的内容之一,例如/usr/include/stdio.h

当 C 具有预处理器时,谁需要功能

好的,所以这更像是一个问题。使用看起来像函数的宏时要小心......

#define min(a,b) a<b?a:b

a 和 b 的最小值的完全合理的定义。然而,预处理器只是一个简单的文本管理器,所以优先级可以咬你:

int value = -min(2,3); // Should be -2?

扩大到

int value = -2<3 ? 2 :3; // Ooops.. result will be 2 

部分修复是用()包装每个参数,用()包装整个表达式:

#define min(a,b) (  (a) < (b) ?(a):(b) )

不过这仍然是 _ 而不是 _ 的功能!例如,你能看出为什么min(i++,10)可能会增加一次或两次!?