• ベストアンサー

ファイル名、関数名、変数名・・・様々な決定について

自分でも具体的に言いたいことが表せないかもしれませんが よろしくお願いします。 なかなかこれで決まりというスタイルが確立しないのですが、 何かに頼りたい自分としては、そういうことを幅広く扱っている 本などがあれば参考にしたいです。 結局最後は自分で決定するしかないということは、頭では分かっているつもりですが・・・ 悩んでいることの例としてはたくさんあって、 ・エラーを表示する関数名として disp_errorなのかdisply_errorなのかshow_errorなのか それともアンダーバー無くしてshowerrorなのか ・最大アイテム数を表す定数名として ITEM_MAXなのかMAX_ITEMなのかITEM_NUMなのか ・データを格納するテーブル名を表す変数名として tablenameなのかtableだけでいいのか ・~の~の~のアイテムという変数名の場合 など、これだけならそれらを聞けば解決するのですが、まだまだあります・・・ 周りからみれば些細(どうでもいい)なことだと思うので 本とかをあまり見かけないのですが、 こういうことに言及しているサイトなり本などはご存知でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.5

★私の場合 ・表示関連の関数が多数ある場合は統一させる意味で DispError() としています。  よって表示関連の関数群は DispXXXX() と先頭4文字をつけます。  その他  初期化用なら→InitXXXX()  アイテム関連→ItemXXXX()  と先頭n文字を統一させています。 ・記号定数の場合も考えは同じで  最大~~~は MAX_XXXX  最小~~~は MIN_XXXX  アイテム関連は ITEM_MAX_XXXX のように ITEM_XXXX から始めます。 ・テーブルの場合は末尾を Table の5文字に統一させています。  名前テーブル→NameTable  道具テーブル→ItemTable  魔法テーブル→MagicTable  コメントもなるべく文字数を揃える(構造体,共用体,クラスなど) ・C言語の時  ローカル変数はすべて小文字(単語区切りは(_)下線文字)  グローバル変数は先頭を大文字、2文字目から小文字(単語区切りは(_)下線文字)  ※グローバル変数は構造体を使って1つだけを定義するのが基本。→extern の場合は。 ・C++言語(クラス)の時  グローバル変数は先頭に g_ を追加  クラスのメンバ変数は先頭に m_ を追加  class hero {   int m_x;   int m_y;   int m_Lv;   int m_HP;   int m_MP;   long m_exp;   long m_gold;  public:   hero();   ~hero();  public: ←区切りの意味で記述   int getX();   int getY();   int getLevel();   void setLevel( int n );   long getGold();  public: ←区切りの意味で記述   その他のメンバ関数  };  クラスのメンバ関数は小文字から始めて単語の境で大文字を混ぜる。 ・こんな感じです。 参考資料: http://sec.ipa.go.jp/download/files//report/200504/coding_guide.pdf→『コーディング作法ガイド』 http://sec.ipa.go.jp/download/dl.php?filename=event/20050222/ohno.pdf→『高品質実装のためのコーディング作法』 書籍: http://www.amazon.co.jp/dp/4798111899/→『組込みソフトウェア開発向けコーディング作法ガイド』 過去質問より: http://oshiete1.goo.ne.jp/qa2271876.html→『あなたのC言語コーディング規約』 http://oshiete1.goo.ne.jp/qa2963476.html→『C/C++ ソースのコーディングについて』 ↑ 私も以前こちらで質問した過去があります。

参考URL:
http://www.amazon.co.jp/dp/4798111899/
takagoo100
質問者

お礼

ご返答ありがとうございます。 Oh-Orangeさんも質問されてたんですね。 >・表示関連の関数が多数ある場合は統一させる意味で DispError() としています。 なるほど、使い分けということですね。 自分はさらにDispかDisplyかっていうところまで気になっちゃうんですよね(もう病的かもしれません・・・) Displyにしたら、そのプログラム内では他の関数名もなるべく省略しないように 書くべきというかそうした方がいいんですか?例えば、InitならInitialize >http://sec.ipa.go.jp/download/files//report/200504/coding_guide.pdf これ凄いですね・・・ 言語ごとにこういうのがあれば見たいのです。 例えばPHPとか基本的(大まか)な書き方は大体同じような感じがしますが、 なんとなく違くないですか? どちらも別に詳しくは知らないので、イメージだけで言ってますが・・・ >クラスのメンバ変数は先頭に m_ を追加 自分の中で常に小規模(規模ってほどでもないか)なプログラムしか 想像してないからかもしれませんが、 >int m_x; >int m_y; これだけ抜きとって見ると、なんか違和感があって だったらxやyだけでいいや、という気持ちになります。 ただこういうのは絶対にm_や他のプリフィックスが必要だと感じていて 自分の中で踏ん切りをつけたいですね。

その他の回答 (5)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.6

この様な話ははっきりいって宗教論なので、 絶対にこのようにするというようなことはありません。 なので、これらを使うように強く流布している物は殆どありません。 あとはセンスの問題でもあるかもしれません。 殆どの場合が、そのプロジェクトや会社、グループの単位で コーティング規則を設けるなど対策を講じています。 どの様に書くかは状況によって変えられるような視野を 持つことが大切だと思います。 プロジェクト単位でコーティング規則が無い場合は、 他人が書いたコードを編集する場合など出来るだけ、 周りの前任者のコードに合せてコードを編集することです。 でなければ、いくら可読性を考慮した書き方であっても、 イキナリ全く違う規則が入り混じって書かれたコードは ナンセンスだからです。 つまり、どれだけ自分の信じた方法が良いと思っていても、 ソースコードがどれだけ一貫して書けるかに尽きると思います。 例えば: ・フラグを表す変数として hogeflagと書かれていて、長すぎるから今回から追加する、 テーブル名の変数名としてfhugaにしようというのはまずいです。 #hogeflagであるならhugaflagにすべきという意味です。 #ただこれも人によって違うと思うので参考程度に。

takagoo100
質問者

お礼

ご返答ありがとうございます。 自分なりに理解できました。ありがとうございます。 >他人が書いたコードを編集する場合など出来るだけ、周りの前任者のコードに合せてコードを編集することです。 こう考えると、やっぱり全世界でって言ったら大げさですけど ある程度書き方は統一した方がいいなぁと改めて実感しますね。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

反対意見が多いことを覚悟で、私のやり方を紹介します。 最近はいろいろ考えるのが面倒なので、自分で命名規約を決められる場合(その方が多いのですが...)には、日本語で命名しています。 例えば、最大アイテム数を表す定数名であれば、 const std::size_t 最大アイテム数 = 10; のようにです。 Visual C++で日本語の識別子を使えるようになったのがきっかけですが、可読性が著しく向上しました。 こんなことで悩むのは時間の無駄ですから。 日本語識別子が使えない状況であれば、標準C++ライブラリまたはBoost C++ Librariesの命名方法に準拠しています。

takagoo100
質問者

お礼

ご返答ありがとうございます。 良い意味で衝撃を受けました。 なるほど、そういう考え方もあるんですね。 自分はこの書き方はしないと思いますが、 こういう分かりやすくしたいという考え方は 好きです(分かりやすいかどうかは別の議論になりそうですが) そういえば空白を多く入れてるソースをたまに見かけますが、 例えば(毎回例えが変ですいません・・・) s[i] = (int)(3+5); を s[ i ] = (int)( 3 + 5 ); ←書き込んだときにスペースが入ってるか心配・・・ と書いてるケースです。 圧倒的に上の書き方が多いと思いますが、 下の書き方も自分では見やすくて好きなんですよね。 ただ自分は上の書き方ですが

  • jk39
  • ベストアンサー率54% (366/670)
回答No.3

とあるプログラマです。 > 周りからみれば些細(どうでもいい)なことだと思うので いえいえ、プロジェクトで仕事をするときなどでは 特に重要なことですよ。 命名規則を含めたコーディングのルールは 「コーディング規約」などといいます。 下記のサイトはとてもよくまとまっていますね。 (私の書き方もこれに近いです。) http://www.shos.info/develop/xp/cplusstd.html ※クラス名、変数名を ClassName や variableName のように  書く方法を「キャメル記法」といいます。 あとC言語で有名なコーディング規約に 「GNU コーディング規約」があります。 その中の「Writing C」を使う方もいると思います。 http://www.sra.co.jp/wingnut/standards-j_toc.html

takagoo100
質問者

お礼

ご返答ありがとうございます。 >http://www.shos.info/develop/xp/cplusstd.html このサイトも素晴らしいですね。 特に>(15) 名前の対称性 で 例えば登録処理、編集処理、削除処理があった時に 登録はaddなのかregistなのか、じゃあaddで決めた時に 削除はdeleteなのかremoveなのか、こういうのでも自分はまだ悩んでる段階です・・・ ただこのケースは上で書かれてるような決まりとは 別の決定の仕方かもしれませんが、参考にしたいと思います。

回答No.2

takagoo100さんの質問って些細なことですが、重要な問題ですよね。 自分も迷いますが、基本的にはプロジェクトにプログラミング規約があればそれに従いますが、無い場合は、自分は以下のサイトの規約に則るようにしています。 http://segroup.fujitsu.com/sdas/technology/develop-guide/2-regulation.html (Javaのプログラミング規約ですが) または、Javadocをみて参考にします。 http://java.sun.com/javase/ja/6/docs/ja/api/index.html 自分の場合は、最初に身に付けた言語がJavaなのでそれが基本になってますね。 >・エラーを表示する関数名として >disp_errorなのかdisply_errorなのかshow_errorなのか >それともアンダーバー無くしてshowerrorなのか この場合は、自分はshowError()ですね。 displayError()でも良い気がしますが、何かshowの方が良く聞くので。。。(^_^;) >・最大アイテム数を表す定数名として >ITEM_MAXなのかMAX_ITEMなのかITEM_NUMなのか この場合、最大アイテム数なので、MAXは入れたいですね。 なので自分は、最初の2つのどちらか、ITEM_MAX_NUMにします。 >・データを格納するテーブル名を表す変数名として >tablenameなのかtableだけでいいのか 自分は、nameTableかもしくは、nameTblにしてしまいます。 >・~の~の~のアイテムという変数名の場合 上記は、ちょっと自分ではイメージが出来ませんでした。。。。 ここであげた例は、あくまで自分だったらの場合なので、ご参考程度までに。

takagoo100
質問者

お礼

ご返答ありがとうございます。 >・~の~の~のアイテムという変数名の場合 説明が足りず申し訳ないです。 自分でも何か良い例がないかと探していたのですが、 例えば、「使っても減らなくて、初期化されてない、アイテム」 無理やりすいません、今のところこれしか浮かびませんでした・・・ uninitialized_item_of_nodecrease これは・・意味わかんないですね・・・ >http://segroup.fujitsu.com/sdas/technology/develop-guide/2-regulation.html これはいいですね。自分でも知りたいことが多々ありました。 参考になります。 >なので自分は、最初の2つのどちらか、ITEM_MAX_NUMにします。 ANo.5でのOh-Orangeさんもそうなのですが、どうやら対象となる物を 先頭に記述して統一感をもたせて、次にMAXや状態を書くやり方が多そうですね。 >displayError()でも良い気がしますが、何かshowの方が良く聞くので 自分もそういう決め方です(この例ではshowErrorが良さそうだと思います) ただこの決め方だと、例えば エラー表示関連ではshowError派が多いのでshowErrorを使うことにして 状態表示関連ではdisplayState派が多いのでdisplayStateを・・・ ということだと、統一感がなくなってしまうので(まぁ悩む以前にこの場合は showで統一するのが当たり前だと思いますが・・・) 1つ1つを多数派で決定できればできれば楽なのになぁと思ったりします。

回答No.1

本、サイトは良く知らないので紹介できませんが、 自分は「主語(目的語)+動詞」を使ってます。エラーなら  Err_Set() // エラー値の設定  Err_Reset() // エラー値の解除  Err_Display() // エラー値の表示 つまり「日本語の語順」のまんまです。欧米のPGは一般に 「動詞+目的語」を使いますが、日常会話の語順を採用しただけで 特に意味はありません。この人たちが命名した関数群をブラウザで 一覧すると互いに関連の無いオブジェクトに関するGet~()やSet~() がずらずらと並んでいて使えない辞書の見本の様になってます。 たぶん彼らはそんなことには頓着しないのでしょう。つまり、 命名に関して彼らの意見を聞いても無駄なのかも知れません。

takagoo100
質問者

お礼

ご返答ありがとうございます。 たしかに気にしすぎてもしょうがないということですよね・・・ ただ自分の場合は、気にする以前のレベルだと思うので まず何かに頼りたいというのがあって、 本題とは少しずれますが、みなさんの意見を聞けるだけでも助かります。 >欧米のPGは一般に「動詞+目的語」を使いますが、 自分の場合、まずここで悩むんですよね・・・ たしかに「主語(目的語)+動詞」の方がすっきりする感じもしますし。

関連するQ&A

  • SQL文に変数を埋め込む場合の方法

    //config.php //$table = "TableName"; 1:require "config.php"; 2:$sql = "SELECT " . $fld . " AS genre, 3: COUNT(*) AS cnt FROM TableName GROUP BY " . 4:$fld; $res = mysql_query($sql, $conn) or die("Data抽出エラー"); 上記のソースを 2:$sql = "SELECT " . $fld . " AS genre, 3: COUNT(*) AS cnt FROM " . $table . " GROUP BY " . $fld; 4: $res = mysql_query($sql, $conn) or die("Data抽出エラー"); この様にして、config.phpより、テーブル名を変数として読み込みたいのですが、エラーになってしまいます。 3行目をどのように記述すればよいのでしょうか?

    • ベストアンサー
    • PHP
  • T-SQLで一時テーブルの名前を毎回変更できるストアドを作りたい

    お世話になります。 初歩的な質問で恐縮ですがご教示いただければ幸いです。 T-SQLでグローバル一時テーブルの名前を毎回変更できるストアドを作り、Access2003アプリから実行させる予定です。 ストアドに、CREATE TABLE [dbo].[@tablename]のように書き、 ストアド実行時に@tablenameの値を ##ABC のように入力したのですが、テーブルはtempdbではなく、しかもテーブル名は@tablenameでテーブルが作成されてしまいます。 CREATE TABLE [dbo].@tablename のように[]をとると ストアド自体を作成できずエラーになってしまいます。 宜しくお願いします。 create PROCEDURE [dbo].[ストアドプロシージャー名] (@tablename nvarchar(255)) AS BEGIN from SET NOCOUNT ON; CREATE TABLE [dbo].[@tablename] <以下省略>

  • cygwinを使ってcsvファイルを読み込み、出力させようとしています

    cygwinを使ってcsvファイルを読み込み、出力させようとしています。 とりあえず、読み込みのみのプログラムを作成し、 実行させてみたのですが(run ファイル名.csv と入力) 「Error: could not start C:\cygwin\home\ユーザー名ファイル名.csv」 と出力され、読み込みができず、困っています。 プログラム初心者です。 恐縮ですがご回答よろしくお願いします。 以下に、読み込みプログラムとcsvファイルを記載します。 (プログラムは拾い物です。) <プログラム> #include <stdio.h> #define MAX_ITEM_SIZE 100 #define MAX_LINE_SIZE 1024 char *GetCSVItem(char *wp, char *buff, int size); void main(int argc, char *argv[]) { FILE *fp; char buff[MAX_LINE_SIZE], *wp, item[3][MAX_ITEM_SIZE]; int i1, len; if(argc != 2){ printf("comand error nyuuryoku keishiki\n"); return; } fp = fopen(argv[1], "r"); if(fp == NULL){ printf("can not open file[%s].\n", argv[1]); return; } for(;;){ if(fgets(buff, MAX_LINE_SIZE, fp) == NULL) break; len = strlen(buff); if(len == 0 || buff[len-1] != '\n'){ if(feof(fp) == 0){ printf("data error[%s].\n", buff); return; } } buff[len-1] = '\0'; wp = buff; if((wp = GetCSVItem(wp, item[0], MAX_ITEM_SIZE)) == NULL){ printf("error(1)\n"); break; } if((wp = GetCSVItem(wp, item[1], MAX_ITEM_SIZE)) == NULL){ printf("error(2)\n"); break; } if((wp = GetCSVItem(wp, item[2], MAX_ITEM_SIZE)) == NULL){ printf("error(3)\n"); break; } if(*wp != '\0'){ printf("error(4)\n"); break; } for(i1 = 0; i1 < 3; i1++){ printf("%d:%s\n", i1+1, item[i1]); } } fclose(fp); } char *GetCSVItem(char *wp, char *buff, int size) { int i1; buff[0] = '\0'; while(*wp == ' ' || *wp == '\t') wp++; if(*wp == '\0'){ return(NULL); } for(i1 = 0; i1 < MAX_ITEM_SIZE; i1++, wp++){ if(i1 >= size) return(NULL); buff[i1] = *wp; if(*wp == '\0'){ buff[i1] = '\0'; return(wp); } if(*wp == ','){ wp++; buff[i1] = '\0'; break; } } return(wp); } <csvファイル> 1,2,3 11,12,13 21,22,23

  • Smarty? あたくしレベルではカスタマイズできません。HELP!

    現在、自力で、テンプレートサイトをカスタマイズ奮闘いたしております。が、ここ数日、全く前に進むことができません。どなたか、ご教授お願いいたします。 オプションが2個の場合、オプション1個目(例 サイズ)横軸、2個目(例 カラー)縦軸 となり、価格表のテーブルが作成されます。 これを《縦横逆表示に!》したいのです。もちろん、それぞれの対象セルの値も・・・ オプションが1個の場合、オプションが0個の場合は、そのままま表示でOK。 オプションが2個の場合のvalueの[0]と[1]を逆で、縦横のタイトルは逆になるのは理解。表の中も逆にしたいので、item[num][num2]をitem[num2][num]にして、逆表示になるもののセル数があわないし、中身が完璧には表示されない・・・ どこをどうすればよいのか途方にくれてます。 下記のHTML?以外の書き換えが必要なのでしょうか?ココ以外はカスタムができない仕様になってます。 以下、元のHTML <!-- Option(オプション在庫・値段詳細) --> <div id="Option" align="center"> <div class="product_name" style="margin:10px 0px;">「<{$product.name}>」のオプション詳細情報</div> <{***** オプションが1個の場合 *****}> <{if $option_num == 1}> <table class="option_table" border="0" cellpadding="1" cellspacing="1"> <tr> <{***** オプション名を表示 *****}> <{section name=num loop=$option_value[0]}> <th class="option_cell1"><{$option_value[0][num].name}></th> <{/section}> </tr> <tr> <{***** 在庫数・値段などを表示 *****}> <{section name=num loop=$option_item[0]}> <td class="option_cell2"> <{$option_item[0][num].price}><br /> <{if $option_item[0][num].d_flg == true}> <{$option_item[0][num].d_stk}> <{/if}> </td> <{/section}> </tr> </table> <{***** オプションが2個の場合 *****}> <{elseif $option_num == 2}> <table class="option_table" border="0" cellpadding="1" cellspacing="1"> <tr> <th class="option_cell1"></th> <{***** オプション名(一つ目)を表示(横に列挙) *****}> <{section name=num loop=$option_value[0]}> <th class="option_cell1"><{$option_value[0][num].name}></th> <{/section}> </tr> <{section name=num loop=$option_value[1]}> <tr> <{***** オプション名(一つ目)を表示(縦に列挙) *****}> <th class="option_cell1"><{$option_value[1][num].name}></th> <{***** 在庫数・値段などを表示 *****}> <{section name=num2 loop=$option_item[num]}> <td class="option_cell2"> <{$option_item[num][num2].price}><br /> <{if $option_item[num][num2].d_flg == true}> <{$option_item[num][num2].d_stk}> <{/if}> </td> <{/section}> </tr> <{/section}> </table> <{***** オプションがない場合 *****}> <{else}> <div style="margin-bottom:10px;margin-top:10px;">オプション情報がありません。</div> <{/if}> <div class="option_btn" style="margin-bottom:10px;margin-top:10px;"> <a href="javascript:window.close();">閉じる</a> </div> <br /> </div>

  • DBリンク&シノニム経由インデックス

    Oracle8iサーバ(サービス名:Aサーバ)と Oracle10gサーバ(サービス名:Bサーバ)があります。 Aサーバに作られた、aスキーマに、test_tableというテーブルがあります。 そのtest_tableをBサーバに作られた、bスキーマから参照する為に、 DBリンク:BA_linkを作成しました。 実際に、bスキーマから参照する場合は、 同スキーマに、 CREATE SYNONYM test_table FOR test_table@BA_link; のように作られたシノニムを利用して、参照します。 抽出に時間がかかるので、インデックスを作成しようと思うのですが、 どのスキーマにどのように作成すればよいのでしょうか? ちなみにインデックスの対象にしたい項目は、 VAR_ITEM VARCHAR2(10) NUM_ITEM NUMBER(5) とします。 ちなみにbスキーマにて、 CREATE INDEX test_table_IX1 ON test_table (VAR_ITEM, NUM_ITEM); と実行したところ、 ORA-02021: リモート・データベースに対するDDL操作が無効です・ というエラーが発生しました。 DBリンク先自身に、作成すべきということはなんとなく予想が つくのですが、そのインデックスはDBリンク経由でも有効なのでしょうか?

  • JSPの中でJavaScriptの変数を使用

    JavaScriptのファンクションの中で以下のような記述をして JavaScriptの変数をJSP内で使用できないかと考えています。 三項演算子の中で javascript の変数 'k' を使用しています。 この場合、Eclipseのエディタ上ではエラーも出ずに正常に動くのですが var k の部分を var num に変更して 三項演算子ないでも 'num' としたら 「文字定数が無効です」 というエラーが出てプログラムを動かそうとしてもできませんでした。 変数名が1文字より多いと使えないのでしょうか。 function setMenuItem(n) { var k = <%= request.getAttribute("selectedIndexDbName") == null ? 'n' : request.getAttribute("selectedIndexDbName") %>; //データベース名プルダウンの選択 document.form.dbName.options[<%= request.getAttribute("selectedIndexDbName") == null ? 'k' : request.getAttribute("selectedIndexDbName") %>].selected = true; }

    • ベストアンサー
    • Java
  • エラーのチェックについて

    1~10の数字以外が出たら、再入力を促すようにしたいのですが、上手くいかないので教えてください。 int main(void) { char buf[MAX], moji[MAX]; int n, num; printf("1から10の番号を入力してください:"); while (1) { fgets(buf, MAX, stdin); // 文字列の読み込み n = sscanf(buf, "%d%s", &num, moji); // 文字列から変換 if (num >= 1 && num <= 10 && n == 1) { // 範囲外のエラーチェック break; // 正なら終了 } else { // 間違っていたら入力し直し printf("1から10の番号を入力してください:"); } } 以上のようにして、aや11, ctrlキー+zを入力してEnterを押したときは良いのですが、aの後に続けてctrlキー+zを入力してEnterを押したらelseのprintfがずっと出力され続けてしまいます。それ以外に自分で試した入力の中にはエラーは出ませんでした。ctrlキー+zのことを良く理解していないということもあるのかもしれません。

  • マクロ,クラス

     こんにちは,シューティングゲームプログラミングという本を読んでいてわからないところがあったので質問させてください. #define TASK(INDEX) ((CTask*)(buf+max_task_size*(INDEX))) この1行がよくわかりません.  これは CTaskList というクラスのコンストラクタにかいてあります.同じところに max_task_sizeの初期化もあります.  また,同じところに  char* buf=new char[max_task_size*(max_num_task+2)];   と書いてあります. CTaskというのはクラス(コンストラクタにCTaskListを引数にとる)です.max_num_taskというのはCtaskListのコンストラクタ内で初期化されてます. このマクロで定義したTASK()は CTaskクラスのポインタの初期化に使われていると思うのですが,マクロの文法がよくわかりません.詳しく教えていただきたいです. 主な疑問 INDEXというのは引数で後のINDEXはその数字になるという解釈でいいのですか.  bufというのはchar配列のポインタだと思うのですが,なんでbuf+数字になっているのでしょうか.  そもそも,(クラス名*)()という形の定義がわかりません. 独学で勉強しててまだ半年ほどしかしていない初心者ですが,よろしくお願いします.

  • Unix

    GNOME端末のエラーについての質問です。 自分はUnix系のGNOME端末を使ってプログラムのコンパイルなどやってます。 今C言語で以下のようなプログラムをコンパイルしたところ、12行目でc:12: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘OpenHashTableAlloc’とエラーが出ました。このエラーの意味を教えていただけますでしょうか? #include <stdio.h> #include <stdlib.h> struct OpenHashTable{ int bucket_num; char *buckets; }; OpenHashTable OpenHashTableAlloc(void) ←12行目 { OpenHashTable *table; table = (OpenHashTable *)malloc(sizeof(OpenHashTable)); if(table == NULL) { return (NULL); } table->bucket_num = 0; table->buckets = NULL; return (table); } int main(void) { OpenHashTableAlloc(); return 0; }

  • MySQLのテーブルのコラム名の取得方法

    MySQLのテーブルを一つのオブジェクトと考えるようなクラスを作ろうとしています。 このクラスの中で、テーブルの各コラム(またはフィールド名)を要素にした配列を作りたいのですが、やり方がわかりません。 自分がある程度調べてみたところでは、MySQLシェルの中では、次のように入力すると添付した画面のようにコラム名の一覧が表示がされるのですが これらのコラム名をPHPスクリプト内にある配列に格納出来ません。 mysql> SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME="transaction"; まだ作成の途中ですが、自分のスクリプトは以下に掲載したようなものです // columnList initialize というブロックが該当部分です。ほかの部分はとりあえず働いてます。 どなたかお知恵を貸していただけないでしょうか。お願いいたします。 <?php class Table{ private $DBname; private $tableName; private $columnList=array(); private $dataArray=array(array()); private $totalRecords; //=================================================== public function __construct($database, $tablename) //=================================================== { $this->DBname=$database; $this->tableName=$tablename; $cxn=mysqli_connect("localhost","root","rsi2018","$database") or die("cannot connect to database"); // $columnList initialize $query="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=\"$tablename\""; $result=mysqli_query($cxn, $query) or die("query failed :1"); $row=mysqli_fetch_array($result); foreach($row as $col){ $this->columnList[]=$col; } // $totalRecords initialize $query="select count(*) as count from $tablename"; $result=mysqli_query($cxn, $query) or die("query failed :3"); $row=mysqli_fetch_array($result); $this->totalRecords=$row["count"]; // $dataArray initialize for($i=0; $i < $this->totalRecords; $i++){ $query="select * from $tablename where id=($i+1)"; $result=mysqli_query($cxn, $query) or die("query failed :2"); $this->dataArray[$i]=mysqli_fetch_assoc($result); } }// end constructor //=================================================== public function showPart($id) //=================================================== { $data=$this->dataArray[$id - 1]; /* foreach($data as $key=>$value){ echo "$key = $value</br>"; } */ echo "ID: ".$data['id']."</br>"; echo "partNumber: ".$data['partNumber']."</br>"; echo "partName: ".$data['partName']."</br>"; echo "simpleName: ".$data['simpleName']."</br>"; echo "stock: ".$data['stock']."</br>"; echo "location: ".$data['location']."</br>"; }// end function //=================================================== public function getTotalRecords() //=================================================== { return $this->totalRecords; }// end function //=================================================== public function showColumnList() //=================================================== { foreach($this->columnList as $field){ echo "$field "; } echo "</br>"; }// end function }// end class ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう