-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathch09s05.html
33 lines (33 loc) · 4.38 KB
/
ch09s05.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>5. indent工具</title><link rel="stylesheet" href="styles.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><link rel="start" href="index.html" title="Linux C编程一站式学习" /><link rel="up" href="ch09.html" title="第 9 章 编码风格" /><link rel="prev" href="ch09s04.html" title="4. 函数" /><link rel="next" href="ch10.html" title="第 10 章 gdb" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">5. indent工具</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch09s04.html">上一页</a> </td><th width="60%" align="center">第 9 章 编码风格</th><td width="20%" align="right"> <a accesskey="n" href="ch10.html">下一页</a></td></tr></table><hr /></div><div class="sect1" lang="zh-cn" xml:lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2738881"></a>5. indent工具</h2></div></div></div><p><code class="literal">indent</code>工具可以把代码格式化成某种风格,例如把<a class="xref" href="ch09s01.html#codingstyle.badcode">例 9.1 “缺少缩进和空白的代码”</a>格式化成内核编码风格:</p><pre class="screen">$ indent -kr -i8 main.c
$ cat main.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
char gesture[3][10] = { "scissor", "stone", "cloth" };
int man, computer, result, ret;
srand(time(NULL));
while (1) {
computer = rand() % 3;
printf
("\nInput your gesture (0-scissor 1-stone 2-cloth):\n");
ret = scanf("%d", &man);
if (ret != 1 || man < 0 || man > 2) {
printf("Invalid input! Please input 0, 1 or 2.\n");
continue;
}
printf("Your gesture: %s\tComputer's gesture: %s\n",
gesture[man], gesture[computer]);
result = (man - computer + 4) % 3 - 1;
if (result > 0)
printf("You win!\n");
else if (result == 0)
printf("Draw!\n");
else
printf("You lose!\n");
}
return 0;
}</pre><p><code class="literal">-kr</code>选项表示K&R风格,<code class="literal">-i8</code>表示缩进8个空格的长度。如果没有指定<code class="literal">-nut</code>选项,则每8个缩进空格会自动用一个Tab代替。注意<code class="literal">indent</code>命令会直接修改原文件,而不是打印到屏幕上或者输出到另一个文件,这一点和很多UNIX命令不同。可以看出,<code class="literal">-kr -i8</code>两个选项格式化出来的代码已经很符合本章介绍的代码风格了,添加了必要的缩进和空白,较长的代码行也会自动折行。美中不足的是没有添加适当的空行,因为<code class="literal">indent</code>工具也不知道哪几行代码在逻辑上是一组的,空行还是要自己动手添,当然原有的空行肯定不会被<code class="literal">indent</code>删去的。</p><p>如果你采纳本章介绍的内核编码风格,基本上<code class="literal">-kr -i8</code>这两个参数就够用了。<code class="literal">indent</code>工具也有支持其它编码风格的选项,具体请参考Man Page。有时候<code class="literal">indent</code>工具的确非常有用,比如某个项目中途决定改变编码风格(这很少见),或者往某个项目中添加的几个代码文件来自另一个编码风格不同的项目,但绝不能因为有了<code class="literal">indent</code>工具就肆无忌惮,一开始把代码写得乱七八糟,最后再依靠<code class="literal">indent</code>去清理。</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch09s04.html">上一页</a> </td><td width="20%" align="center"><a accesskey="u" href="ch09.html">上一级</a></td><td width="40%" align="right"> <a accesskey="n" href="ch10.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">4. 函数 </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 第 10 章 gdb</td></tr></table></div></body></html>