Cでプログラムを組んでいます。
しかし、いつも変なことに悩まされてしまいます…。

『どの部分を大文字で書いて、どの部分を小文字で書くか』
書き方を統一したくて、自分なりに書き方の規則を考えてみるのですが、
いまいちどのように書くのがきれいなのか、わかりやすいのか…と
また悩んでしまいます(苦笑)

みなさんはどのようにしてプログラムを書いていますか?
定数はすべて大文字、関数は頭文字だけ大文字、など、
どんな規則の上でプログラムを書いているか、
参考にさせていただきたくて質問しました。

ちなみに、今悩んでいるのは、
「定数」「関数」「マクロ定義」「typedefした名前」
の書き方です。

しょうもない質問ですみません…(苦笑)
でも、気になってなかなかプログラムが進まないのです(苦笑)

このQ&Aに関連する最新のQ&A

A 回答 (3件)

 今は割とみんなバラバラなんですね。


 まあ、俺もヒトのことは言えませんが。

 えとですね。C言語には、#define や enum で定義したもののうち、Const 属性を持つ値はすべて大文字にする、という習慣があります。つまり、プログラム内で書き換えのできない値のことです。
 また、昔は変数は基本的に小文字にする、という習慣でしたが、現在は「特に重要な変数は、文章として読めるように単語の先頭を大文字にする」という習慣ができているようです。

 もちろんただの習慣で、C言語の規約ではありませんが。
    • good
    • 0
この回答へのお礼

プログラム内で書き換えのできない値は大文字で、という習慣から、
定数はみなさん大文字で書くのですね。

参考にさせていただきます(^-^)
どうもありがとうございました。

お礼日時:2002/02/01 18:00

こんにちは、honiyonです。



 私は基本的に単語の頭を大文字にしています。
例)
 int ItemCount
 int WHCount //Window Handle Countを略してみた

 そして型を表す記号は小文字にしています。
例)
char *pszFileName


 定数やDEFINEは全て大文字にしています。
例)
#define SYSTEM_NAME "hogehogekun"


 個人の趣味で開発している分には、自分の分かりやすい命名規約で行っても構わないと思います。

 因みに、企業の場合はその会社によって独自のルールがあり、プログラマーはその企業の決めた規約に沿ってコーディングしていきます。
 こうすれば他のプログラマーがソースをみても分かりやすい、という理由からなのですが、その規約がタコだと逆にぐちゃぐちゃなコードになって観にくい、バグ多発、という事になっちゃったりするんですよね・・・苦笑
 一度だけコーディング規約のせいで、本当は下位クラスのメソッドをoverrideされるべきなのにコーディング規約のせいで違い関数になっちゃってる上位クラスのメソッドを見た事があります(^^;

 ちょっと余談入ってしまいました。
 参考になれば幸いです(..
    • good
    • 0
この回答へのお礼

企業のように、誰かが規則を作ってしまってくれていれば
こんなことで悩まなくてもいいのに…と思う日々です(苦笑)

参考にさせていただきます(^-^)
どうもありがとうございました。

お礼日時:2002/02/01 15:44

私は個人で定義したものについては大文字を使用していますね。


#defineやtypedef等。


#define DEF_ABCD
typedef struct{
 int a;
 int b;
}TBL_ABCD, *PTBL_ABCD

関数は単語単位の先頭大文字でしょうか?

static void GetAbcdFromEfgh()
    • good
    • 0
この回答へのお礼

定数は大文字、関数の頭文字は大文字、というのはけっこう一般的なのですね。
typedefは最近使い始めたので、余計にどう書いていいのか迷ってました。

参考にさせていただきます(^-^)
どうもありがとうございました。

お礼日時:2002/02/01 15:43

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q小文字は大文字に、大文字は小文字に変換して表示するプログラム

C言語の問題で、ユーザが文字を入力し、CTRL+Zが押されるまで、半角英数字の入力を受け付ける。
受け付けた文字列(最大でも1000文字)を、小文字は大文字に、大文字は小文字に変換して表示するプログラムを作成する。数字に対しては何も変化させなくて良い。
けっこう考えたんですが全くわかりません。
どなたか知恵を貸してください。

Aベストアンサー

#include <stdio.h>
#include <ctype.h>

int main (void)
{
int c;

if((c = getchar()) == EOF) return 0;
if(isupper(c)) c = tolower(c);
else c = toupper(c);
putchar(c);
main();
return 0;
}

Q大文字を小文字に、小文字を大文字にするプログラム

問題は、
ファイルにあるアルファベットの大文字を小文字に変換し、小文字は大文字に変換して、ファイルに保存するプログラムを作りなさい
というものです。
色々考えて、
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>

int main(int argc,char **argv){
int fd,flag1,flag2;
int i,n;
char buffer[512],x;
fd = open(argv[1],O_RDWR);

if(fd == -1)
perror("open");

while((n = read(fd,buffer,sizeof(buffer)))>0){
x = buffer[i];
flag1 = islower(x);
flag2 = isupper(x);

for(i=0;i<n;++i)
if(flag1 == 1){
buffer[i] = toupper(buffer[i]);
}else if(flag2 == 1){
buffer[i] = tolower(buffer[i]);
}
write(fd,buffer,n);
}
close(fd);
exit(0);
}

のようなプログラムを考えましたが、うまくいきません。
toupperのような関数を使ったのは初めてなのでよく使い方が分からずこのようなプログラムになってしまいました。
どうか正しく動くようなプログラムを教えてください。お願いします。

問題は、
ファイルにあるアルファベットの大文字を小文字に変換し、小文字は大文字に変換して、ファイルに保存するプログラムを作りなさい
というものです。
色々考えて、
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>

int main(int argc,char **argv){
int fd,flag1,flag2;
int i,n;
char buffer[512],x;
fd = open(argv[1],O_RDWR);

if(fd == -1)
perror("open");

while((n = rea...続きを読む

Aベストアンサー

flag1 = islower(x);
flag2 = isupper(x);

if(flag1 == 1){
buffer[i] = toupper(buffer[i]);
}else if(flag2 == 1){
buffer[i] = tolower(buffer[i]);
}

flagって名前のフラグ変数もどうにかして欲しいけどそれはおいといて、
isupper/islower なんかの戻り値は0/1とは限りません。


Manpage of ISALPHA
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/isspace.3.html
文字 c が調べた文字の種類に合っていれば 0 以外を返す。そうでなければ 0 を返す。

$cat mogera.c
#include <ctype.h>
#include <stdio.h>
int
main()
{
printf("isupper('A')==%d\n", isupper('A'));
printf("islower('A')==%d\n", islower('A'));
printf("isupper('z')==%d\n", isupper('z'));
printf("islower('z')==%d\n", islower('z'));

return 0;
}

isupper('A')==1
islower('A')==0
isupper('z')==0
islower('z')==2

flag1 = islower(x);
flag2 = isupper(x);

if(flag1 == 1){
buffer[i] = toupper(buffer[i]);
}else if(flag2 == 1){
buffer[i] = tolower(buffer[i]);
}

flagって名前のフラグ変数もどうにかして欲しいけどそれはおいといて、
isupper/islower なんかの戻り値は0/1とは限りません。


Manpage of ISALPHA
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/isspace.3.html
文字 c が調べた文字の種類に合っていれば 0 以外を返す。そうでなければ 0 を返す。

$cat mogera.c
#include <ct...続きを読む

Q【VC++2005】ソースの書き方:コーディングを****.hのファイルに書いてもいいでしょうか?変数名の命名規則はありますか?

VC++2005の超超初心者です。
現在、VC++2005(Express Edition)でCLRでプロジェクトを
つくり、いろいろとコーディングしています。

今まで、参考書「作って覚えるVisual C++ 2005 Express Editon」
を利用して、半分泣きながらコーディングしていました。

その参考書では、コーディングを*****.cppでなく、
****.hのファイルにすべて書いているのですが、いいものでしょうか?
先輩が残していったVC++6.0のソースを見ると、cpp内に書いていますが
どちらがよろしいでしょうか?

また、他の参考書を見ると、変数名の先頭に「m」をつけていますが、
何か意味があるのでしょうか?
(変数名をつける時の作法ってありますか?)

せっかくなら、きれいなソースを書きたいと思うので、
詳しい方いましたら、ご教授頂きたく思います。

Aベストアンサー

幾つかの.cppで同じものを定義する必要があるもの→.hに定義を書く
1つの.cppで1回しか定義しないもの→.cppに書く

・幾つかの.cppで同じものを定義する必要があるものの例
#defineの定義
関数のプロトタイプ宣言
typedefの定義
structの定義
classの定義
など。

・1つの.cppで1回しか定義しないものの例
グローバル変数の実体の宣言
関数の実体の宣言
クラス変数の実体の宣言
構造体変数の実体の宣言
など。

例えば、t1.cpp、t2.cpp、t3.cppの3つのソースで
#define INPUT_BUF_MAX 256
の定義が欲しい場合は
-------t1.cpp-------
#define INPUT_BUF_MAX 256

-------t2.cpp-------
#define INPUT_BUF_MAX 256

-------t3.cpp-------
#define INPUT_BUF_MAX 256
と書いてはいけません。書くなら

-------t.h-------
#define INPUT_BUF_MAX 256

-------t1.cpp-------
#include "t.h"

-------t2.cpp-------
#include "t.h"

-------t3.cpp-------
#include "t.h"

と書きます。

もし「256を512にしよう」と思ったら「t.hの256を512に直して、再構築」で済みます。

もし、最初の書き方で、t3.cppだけ直し忘れると
-------t1.cpp-------
#define INPUT_BUF_MAX 512

-------t2.cpp-------
#define INPUT_BUF_MAX 512

-------t3.cpp-------
#define INPUT_BUF_MAX 256
になっていると「t3.cppだけ数字が違ったままになっていて、バグが出る」でしょう。

このように「共通の定義や宣言は、.hに書く」のです。

幾つかの.cppで同じものを定義する必要があるもの→.hに定義を書く
1つの.cppで1回しか定義しないもの→.cppに書く

・幾つかの.cppで同じものを定義する必要があるものの例
#defineの定義
関数のプロトタイプ宣言
typedefの定義
structの定義
classの定義
など。

・1つの.cppで1回しか定義しないものの例
グローバル変数の実体の宣言
関数の実体の宣言
クラス変数の実体の宣言
構造体変数の実体の宣言
など。

例えば、t1.cpp、t2.cpp、t3.cppの3つのソースで
#define INPUT_BUF_MAX 256
...続きを読む

Qtypedefをプログラム中で解除するには?

C言語において、
typedefした後に
そのtypedefをプログラム中で解除するにはどうしたらいいでしょうか?

typedef struct _test test

[] test ←typedef解除

Aベストアンサー

解除したい目的はなんでしょうか?
目的によっては代替手段があるかもしれません。

QTCP/IP通信型大文字・小文字変換プログラム

TCP/IP通信型大文字・小文字変換プログラムを作りたいです。
しかし、うまく2つのプログラムが接続されません。
恐らく、IPアドレスやホスト名の問題だと思います。
超初心者でそこのところをあまり理解していません。
どなたかプログラムの補足をお願いします。

概要は
・クライアント
キーボードから文字列を入力し、サーバーに送信。
サーバーから送信された文字列を画面に出力。

・サーバー
クライアントから送信された文字列に対し、
大文字は小文字に、小文字は大文字に変換して返す。

クライアント側プログラム

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#define SOCK_NAME "./socket"

int main()
{
struct sockaddr_in saddr;
int soc;
char buf[1024];

if ( (soc =socket(AF_INET, SOCK_STREAM, 0 ) ) < 0 ) {
perror("socket");
exit(1);
}

memset((char *)&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr=inet_addr("192.168.1.1");
saddr.sin_port=htons(1357);

if(connect(soc, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
perror("connect");
exit(1);
}
fprintf(stderr, "Connection established: socket %d used.\n", soc);

while(fgets(buf, 1024, stdin)){
if(buf[strlen(buf) -1] == "\n") buf[strlen(buf) -1] = "\0";
write(soc, buf, 1024);
read(soc, buf, 1024);
fprintf(stdout, "%s\n", buf);
}
close(soc);
return 0;

}

サーバー側プログラム

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define SOCK_NAME "./socket"

int main()
{
int i;
int fd1, fd2;
struct sockaddr_in saddr;
struct sockaddr_in caddr;

int len;
int ret;
char buf[1024];

if((fd1 =socket(AF_INET, SOCK_STREAM, 0)) < 0 ){
perror("socket");
exit(1);
}

memset((char *)&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr=INADDR_ANY;
saddr.sin_port=htons(1357);


unlink(SOCK_NAME);
if(bind(fd1, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
perror("bind");
exit(1);
}
if(listen(fd1,5) < 0 ) {
perror("listen");
exit(1);
}
while(1){
len = sizeof(caddr);
if((fd2 = accept(fd1, (struct sockaddr *)&caddr, &len)) < 0){
perror("accept");
exit(1);
}

fprintf(stderr, "Connection established: socket %d used.\n", fd2);

while((ret = read(fd2, buf, 1024)) > 0 ){
fprintf(stderr, "read: &s\n", buf);
for(i=0; i<ret; i++)
if(islower(buf[i]))
buf[i] = toupper(buf[i]);
if(isupper(buf[i]))
buf[i] = tolower(buf[i]);

fprintf(stderr, "write: %s\n", buf);
write(fd2, buf, 1024);
}
close(fd2);
}
close(fd1);

return 0;
}

TCP/IP通信型大文字・小文字変換プログラムを作りたいです。
しかし、うまく2つのプログラムが接続されません。
恐らく、IPアドレスやホスト名の問題だと思います。
超初心者でそこのところをあまり理解していません。
どなたかプログラムの補足をお願いします。

概要は
・クライアント
キーボードから文字列を入力し、サーバーに送信。
サーバーから送信された文字列を画面に出力。

・サーバー
クライアントから送信された文字列に対し、
大文字は小文字に、小文字は大文字に変換して返す。

...続きを読む

Aベストアンサー

クライアント側でIPアドレスとして 192.168.1.1を指定していますけど
これはあってますか?

プログラムにバグがあったので、それを修正した上で
ループバックアドレス(127.0.0.1)を指定して試したところ
うまく動作しました。

いきなりサーバーとクライアント両方を試すより、
サーバーは正しく動くのか、
クライアントは正しく動くのか
をそれぞれ試すようにした方がよくはないですか。

サーバーのテストなら telnetでも試せますし。


人気Q&Aランキング

おすすめ情報