2012/06/19
コーディングスタイル
ちょっと間が空いてしまったが、
自分のコーディングスタイルを晒すために
簡単なプログラムを書いてみた。
プログラムは与えられた数値を2進数にして表示するだけの
簡単なプログラムなのであまり参考にはならないと思うが、
コーディングスタイルで取り上げた要素がほぼ網羅されていると思う。
条件演算子は無理矢理使ったので良い子は真似しない様に
1/* 2 * All rights reserved, copyright (C) 2012, Mitzyuki IMAIZUMI 3 * 4 * $Id: printb.c,v 1.1 2012/06/18 10:57:54 mitz Exp $ 5 */ 6#include <stdio.h> 7#include <stdlib.h> 8#include <string.h> 9#include <unistd.h> 10 11/* 12 * 10進数を2進数変換に変換して表示 13 */ 14void printb(int num) 15{ 16 17 int x = num; 18 char str[sizeof(int)*8+1], 19 *ptr; 20 21 memset(str, '\0', sizeof(str)); 22 23 for(ptr=str+sizeof(str)-2; ptr>=str; x>>=1) 24 *ptr-- = '0' + (x & 1); 25 26 printf("%s (%d)\n", str, num); 27 28} 29 30/* 31 * usage メッセージ表示 32 */ 33int usage(const char *myname) 34{ 35 36 fprintf(stderr, "Usage: %s [-v][-h|-o] num [num ...]\n", myname); 37 38 return(255); 39 40} 41 42/* 43 * ヘッダ表示 44 */ 45void header(void) 46{ 47 48 size_t i; 49 50 for(i=0; i<sizeof(int); i++) 51 printf(" *"); 52 printf("\n"); 53 54} 55 56/* 57 * メイン処理 58 */ 59int main(int argc, char **argv) 60{ 61 62 int verbose = 0, 63 base = 0; 64 char ch, 65 *myname; 66 67 /* basename $0 取得 */ 68 myname = (myname = strrchr(*argv, '/')) ? myname++ : *argv; 69 70 /* オプション解析 */ 71 while((ch = getopt(argc, argv, "voh")) != EOF) 72 switch(ch){ 73 case 'v': 74 verbose = 1; 75 break; 76 77 case 'o': 78 base = 8; 79 break; 80 81 case 'h': 82 base = 16; 83 break; 84 85 default: 86 exit(usage(myname)); 87 } 88 89 argc -= optind; 90 argv += optind; 91 92 /* ヘッダ出力 */ 93 if(verbose) 94 header(); 95 96 /* 2進数変換 */ 97 while(*argv) 98 printb(strtol(*argv++, NULL, base)); 99 100 exit(0); 101 102}
https://blog.bsdhack.org/index.cgi/Computer/20120619.trackback
コーディングスタイル晒し
年単位で真面目にコード書いてませんが、一応職業はプログラマだと言い続けております...