- ベストアンサー
プログラム、どのように書いていますか?
Cでプログラムを組んでいます。 しかし、いつも変なことに悩まされてしまいます…。 『どの部分を大文字で書いて、どの部分を小文字で書くか』 書き方を統一したくて、自分なりに書き方の規則を考えてみるのですが、 いまいちどのように書くのがきれいなのか、わかりやすいのか…と また悩んでしまいます(苦笑) みなさんはどのようにしてプログラムを書いていますか? 定数はすべて大文字、関数は頭文字だけ大文字、など、 どんな規則の上でプログラムを書いているか、 参考にさせていただきたくて質問しました。 ちなみに、今悩んでいるのは、 「定数」「関数」「マクロ定義」「typedefした名前」 の書き方です。 しょうもない質問ですみません…(苦笑) でも、気になってなかなかプログラムが進まないのです(苦笑)
- pooh51
- お礼率89% (68/76)
- C・C++・C#
- 回答数3
- ありがとう数4
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
今は割とみんなバラバラなんですね。 まあ、俺もヒトのことは言えませんが。 えとですね。C言語には、#define や enum で定義したもののうち、Const 属性を持つ値はすべて大文字にする、という習慣があります。つまり、プログラム内で書き換えのできない値のことです。 また、昔は変数は基本的に小文字にする、という習慣でしたが、現在は「特に重要な変数は、文章として読めるように単語の先頭を大文字にする」という習慣ができているようです。 もちろんただの習慣で、C言語の規約ではありませんが。
その他の回答 (2)
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、honiyonです。 私は基本的に単語の頭を大文字にしています。 例) int ItemCount int WHCount //Window Handle Countを略してみた そして型を表す記号は小文字にしています。 例) char *pszFileName 定数やDEFINEは全て大文字にしています。 例) #define SYSTEM_NAME "hogehogekun" 個人の趣味で開発している分には、自分の分かりやすい命名規約で行っても構わないと思います。 因みに、企業の場合はその会社によって独自のルールがあり、プログラマーはその企業の決めた規約に沿ってコーディングしていきます。 こうすれば他のプログラマーがソースをみても分かりやすい、という理由からなのですが、その規約がタコだと逆にぐちゃぐちゃなコードになって観にくい、バグ多発、という事になっちゃったりするんですよね・・・苦笑 一度だけコーディング規約のせいで、本当は下位クラスのメソッドをoverrideされるべきなのにコーディング規約のせいで違い関数になっちゃってる上位クラスのメソッドを見た事があります(^^; ちょっと余談入ってしまいました。 参考になれば幸いです(..
お礼
企業のように、誰かが規則を作ってしまってくれていれば こんなことで悩まなくてもいいのに…と思う日々です(苦笑) 参考にさせていただきます(^-^) どうもありがとうございました。
- y_herohero
- ベストアンサー率30% (72/239)
私は個人で定義したものについては大文字を使用していますね。 #defineやtypedef等。 例 #define DEF_ABCD typedef struct{ int a; int b; }TBL_ABCD, *PTBL_ABCD 関数は単語単位の先頭大文字でしょうか? static void GetAbcdFromEfgh()
お礼
定数は大文字、関数の頭文字は大文字、というのはけっこう一般的なのですね。 typedefは最近使い始めたので、余計にどう書いていいのか迷ってました。 参考にさせていただきます(^-^) どうもありがとうございました。
関連するQ&A
- 桁あふれ誤差のプログラムで質問です。
1から15までの階乗を計算するプログラムで、階乗を求める関数を定義してその結果を確認し、その際に階乗の計算を開始する数と終了する数を記号定数で定義(#defineを使って)したいのですが、分からなくて困っています。 関数を使わないで以下のようにやり、 #include <stdio.h> #include <math.h> int main(void) { int n; int ans=1; for(n=1;n<=15;n++) { ans=ans*n; printf("%d!=%d\n",n,ans); } return 0; } これをやってみてなんとか結果が確認できたのですが、上記のように、階乗を求める関数を定義して、この上記のプログラムを書き換えて、そのときに階乗の計算を開始する数と終了する数を記号定数で定義(#defineを使って)して行いたいのですが、 分からなくて本当に困っています。助けてください。
- ベストアンサー
- C・C++・C#
- 関数ポインタを返す関数の型をtypedefする方法
C言語について質問します。 ある関数を定義するとします。 その関数は引数としてintを一つ取り、返値としてその関数と同じ型の関数へのポインタを返すようにしたいのですが、どのように書けばよいのでしょうか? そして、その関数の型をtypedefで定義したいです。 例えば、FNをtypedefしたいその関数の型だとすると、 typedef FN (*FN)(int); のようなFNを定義したいのですが、上のように書いても当然コンパイラ(VC9)に怒られます。 最悪、 typedef void* (*FN)(int); とvoidポインタを返すように定義しておいて、そのポインタを返値として受け取った側でFNにキャストし直す方法で対処できなくもないですが、ちょっと強引過ぎる気がします。 何かいい方法はあるのでしょうか? boost::functionあたりを使えばできそうな、そうでもないような気がしますが、できれば純粋なCでの解決法を望みます。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- Cで書かれたコードの文字マクロ部分がわかりません。
下記に示す、Cのサンプルプログラムの文字マクロの部分がわからず、困っています。 ソースの実行環境の違いを吸収するための部分であることはわかるのですが、どうしてこのようにて定義されたのかがわかりません。 特に、 ●__MINGW32__とは何か? ●#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)のところで、なぜ||と&&を併用しているのか。&& !defined(__MINGW32__)がどうして必要なのか? ●C##UI64、C##UL、C##ULLはそれぞれ何なのか? ●__arch64__は何か?なぜ必要なのか? ●なぜ、下のソース(文字マクロ部分)のdefineの流れになったのか? のあたりがわかりません。よろしくお願いします。 ---------------------------------------------------------------------- #if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) typedef unsigned __int64 u64; #define U64(C) C##UI64 #elif defined(__arch64__) typedef unsigned long u64; #define U64(C) C##UL #else typedef unsigned long long u64; #define U64(C) C##ULL #endif ----------------------------------------------------------------------
- ベストアンサー
- C・C++・C#
- ヘッダーファイルについて
//DMusic7Ex.h あるプログラムを解析しています。 //コンパイラ設定 //多重定義防止 #pragma once //ファイルインクルード #include <dmusicc.h> #include <dmusici.h> //型定義 typedef IDirectMusicPerformance* LPDIRECTMUSICPERFORMANCE; typedef IDirectMusic* LPDIRECTMUSIC; typedef IDirectMusicLoader* LPDIRECTMUSICLOADER; typedef IDirectMusicSegment* LPDIRECTMUSICSEGMENT; //関数プロトタイプ 1・DMusic7Ex.cppを作らず他の関数で、このヘッダーファイルをインクルードする手法は一般的なのか? 2・なぜ関数プロトタイプを記述しないで、このタイプ宣言を他のファイルで使用するのは一般的なのか?
- ベストアンサー
- C・C++・C#
- 次のプログラムが作れません…
次のプログラムが作れません… キーボードから文字列と一つの検索文字を入力します。 この時、入力した文字列の中にある、検索文字の個数を表示するプログラムなのですが… 条件が以下のようにあります。 プログラムの関数の定義部分以外は、以下にあげるものを変更せずそのまま使用すること。 #include<stdio.h> int search_letter(char *str, char letter); int main(void){ int cnt; char in[100]; cahr ch; printf("Input a string: "); gets(in); printf("Input a letter: "); scanf("%c", &ch); cnt = search_letter( in, ch ); printf("The number of letter '%c' is %d\n", ch, cnt); return 0; } プログラム中に出てくる関数「search_letter」は、第一引数で与えた文字列へのポインタで示される文字列の中から、第二引数で与えられた文字の個数を計算する関数です。 このプログラムでは大文字、小文字を区別して処理します。 出力結果は以下と同じようにしなければなりません。 ./pz1-2 Input a string: Mousukkari akidesune Input a letter: o The number of letter 'o' is 1 *"./pz1-2"と"Mousukkari akidesune"はキーボードから入力した文字です。 よろしくお願いします。
- 締切済み
- C・C++・C#
- 問題の解き方・考え方がわかりません。
数学を勉強しましたが、挫折したものです。 なので、数学チックに質問できていないのはご容赦ください。 以下の問題で悩んでいます。 F(aX,bY,cZ,dQ,・・・・・) = L という式があり、 定数(小文字)は自分で任意に定義できます。 今、X、Y、Z、Q、・・・・・Lの標本データが手元にあり、 Lをなるべく低い値にするために、定数(小文字)を決めようとしています。 F()関数の処理は「未定義」です。 どういった計算をしたら定数(小文字)を求められるのでしょうか? ちなみにX、Y、Z、Q、・・・・・Lの標本データは直線型の相関がありません。 ずっと考えていたら、頭がふやけてきた気がします。 この際、他の人に教わったほうが早いと思い、質問させていただきました。 よろしくお願いします。
- 締切済み
- 数学・算数
- 文字列内で定数を使いたいときに手間がかかる
文字列内で定数を使いたいときにこういう手法があります。 $a = function($t){ return $t }; echo "{$a(TEISUU)}"; これをいろんな関数内でも気軽に使いたいのですが、いざやってみると ・必要な場所で毎回上記を定義する ・ライブラリ関数として別個定義しインクルードしておいて、使いたい関数内でglobal宣言する ・$GLOBALSを使う このようにいずれも余計な手間や見た目が雑になってしまい使い勝手が悪いです。 どの関数内でも手間いらずで「$a(定数)」を使う方法はないでしょうか。
- ベストアンサー
- PHP
- 1954/06/21 昭和二十九年六月二十一日
エクセルで、「1954/6/21」を「昭和29年(0)6月21日」とやるのはすぐに分かるのですが、今、漢数字にしなさい、と言われました(今画面上の表示は「21-Jul-54」)。 しかも、「21」は「二一」ではなく「二十一」、「10」は、「一〇」ではなく「十」なのです。 関数や、ユーザー定義ではムリなような気もするのですが(表示がそうなっていれば、テキストに取り出せるので、ユーザー定義でも可)、VBAでも構いません(VBAでは、その部分のコードだけで十分で、例えば「A」列に上記「1954/6/21」のデータが入っていて、それを「B」列に書き出す部分だけで十分です)。 きのう中に結果をださないといけなかったので、きのうはとりあえず、「21-Jun-54」を文字列にしてしまって、頭2文字、真ん中3文字、後ろ2文字を抜き出して、それぞれすべて「Select Case」で「1」の場合は「一日」とか「10」の場合は「十日」、「Jan」の場合は、「一月」などと、ある意味、ほぼ手作業でやってしまいました。 しかし、明らかに鈍くさいマクロなので、本番までに、何とかスマートなマクロにしたくて、お尋ねする次第です。 よろしく、お願いします。
- ベストアンサー
- Excel(エクセル)
- プログラムの追加と削除
プログラムの追加と削除を開くと、インストールされているプログラムが少ししか表示されません。 たとえば、並べ替えの部分を名前にすると、プログラムの頭の文字がAのプログラムが6つぐらいとか、 サイズにすると、サイズの大きいものから3つだけとか。 もっとたくさんのプログラムをインストールしているはずなのに 全部が表示されません、なぜでしょうか?
- ベストアンサー
- Windows XP
お礼
プログラム内で書き換えのできない値は大文字で、という習慣から、 定数はみなさん大文字で書くのですね。 参考にさせていただきます(^-^) どうもありがとうございました。