基本的にはその言語の開発者の流儀に従う。
C は Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, second edition (Prentice-Hall, 1988) のスタイル(K&R 流)に従う。
C++ も基本的には上と同じでいいが, Bjarne Stroustrup, The C++ Programming Language, third edition (Addison-Wesley, 1997) に従って char *p; ではなく char* p; と書く。 私の CGI で学ぶ C++ のコード例参照。
Java も基本的には上と同じでいいが, Java 独自の部分は Sun から出ている Java の本の流儀に従う。 私の Java 言語について のコード例参照。
インデントは K&R の本にならって4桁ごととする。 TAB コードは使わず,スペースで展開する*。
* 『C言語による最新アルゴリズム事典』 のソースコードでは VZ エディタで C を編集したときの既定値で TAB を4桁としたが, 環境によって見え方が違ってしまった。 ちなみに,この本は紙を節約するため詰め込みすぎたところがあるが, これは真似る必要はない。
右側のコメントは33バイト目から始める(これはあまり気にする必要はない)。 33という数字は下の indent や CC mode での既定値。
//345678901234567890123456789012345678901234567890 #include// 入出力の準備 using namespace std; // std を使う int main(int argc, char* argv[]) // メイン { for (int i = 1; i < argc; i++) // 引数を出力 cout << argv[i] << '\n'; }
GNU の indent を次のように使えば C ソースを(ほぼ)上のルールに則って書き直してくれます:
indent -kr -ts255 *.c
-kr は K&R 流,-ts255 は255文字のスペースをTABコードに置き換える (したがって実際にはTABの代わりにスペースを使う) という意味です。
たとえば次のようなコードを処理してみましょう。
int foo( double x ){ if( sin( x ) == 0 ) { return 3; } else { return 5; } }
indent -kr -ts255 の出力は次のようになります。
int foo(double x) { if (sin(x) == 0) { return 3; } else { return 5; } }
indent は C++ でも簡単な場合は使えますが,完全ではありません。 Java ではさらに悲惨なことになります。
XEmacs/Emacs/Mule ではファイルを開くと拡張子で自動的に言語を判断し, 適当な編集モードになります。 インデントのルールを指定しておけば, 自動的にそれに則ってインデントしてくれますので, スタイルをそろえるのに便利です。 最下行に C とか C++ とか Java とか出るはずですので,確認してください。 実際に働いているのは CC mode という emacs lisp プログラムです。
インデントのルールを K&R 流にするには, ホームディレクトリの .emacs に次のように書き加えます:
(require 'cc-mode) ;; Kernighan & Ritchie スタイルにする (setq c-default-style "k&r") ;; BackSpace キーを「賢く」し,インデント幅は4桁,タブはスペースに展開 (add-hook 'c-mode-common-hook '(lambda () (progn (c-toggle-hungry-state 1) (setq c-basic-offset 4 indent-tabs-mode nil)))) ;; .hpp と .h を C++ の拡張子とする(.h の方は余計かも) (setq auto-mode-alist (append '(("\\.hpp$" . c++-mode) ("\\.h$" . c++-mode) ) auto-mode-alist))
これでも望みのモードにならない場合は,たとえば M-x c++-mode のように打ち込みます。 あるいは,ファイルの先頭に -*- C++ -*- を含む文字列を,たとえば
// This is a -*- C++ -*- header.のように書いておけば,C++ モードになります。
CC mode のよく使う機能をまとめておきます。
最新の CC mode のインストールは次のようにします。
まず CC Mode サイトから最新版をいただいてきて,Emacs 用のディレクトリ(下の例では /usr/local/share/emacs/site-lisp)で展開します。
cd /usr/local/share/emacs/site-lisp tar xvzf .../cc-mode-5.30.8.tar.gz ln -s cc-mode-5.30.8 cc-mode
Mule (Emacs 19.34) の場合は cc-make.el の
(defconst cc-path-to-the-custom-library ;; 中略 nil )となっているところを
(defconst cc-path-to-the-custom-library ;; 中略 "/usr/local/share/emacs/site-lisp/cc-mode/" )に変えます。さらに, custom というライブラリをいただいてきて, 適当なところで展開して Makefile の
EMACS = emacsを
EMACS = muleにして make してできた *.elc と念のため *.el を cc-mode のディレクトリにコピーします。
そうしてから,
mule -batch -no-site-file -q -l cc-make.el cc-*.elと打ち込みます。
.emacs に上記のパスを設定しておきます。
(setq load-path (cons "/usr/local/share/emacs/site-lisp/cc-mode" load-path))
Last modified: 2004-04-04 09:25:44