
c言語の改修されたソースから改修箇所、改修箇所がある関数名を取得したいです。
今現在、数万行のソースに改修を加えているところなのですが、改修箇所が増えていくにつれどの改修がどの関数にあったか分からなくなってます。また前の人の改修もあるため、その改修がある関数も分かるようにしたいです。
改修箇所については、関数内の改修箇所の直前に連番が必ず振られています。
関数については特に目立ったルールはありません。
すみませんが、どなたかお力をお貸しください…
A 回答 (9件)
- 最新から表示
- 回答順に表示
No.9
- 回答日時:
要するに、「改修箇所」が「どの関数にあるか」を探し出せばいいのですよね。
で、その手掛かりが「直前に連番」である、と。ソースコードの記述が次の条件を満たしているなら、目視での確認は可能です。
・「直前に連番」の書式が、ある法則に従っている
・関数名(型名なども含む)が必ず行頭、それ以外のステートメントは必ずインデントされている
UNIX系のOSであればgrepコマンドなどを使って、上記の条件に従う行を抽出すればいいです。
例えば、連番の書式は「/*数字のみの文字列*/」、関数名は必ずアルファベットから始まるならば、
grep '\(/\*[0-9][0-9]*\*/\|^[a-zA-Z]\)' file.c
みたいな感じで取り出せるでしょう。
例えば次のようなソースコード(このサイトでは先頭のスペースは表示時に詰められてしまうので、「_」に置き換えています)なら、
#include <stdio.h>
int foo()
{
____int a = 0;
____/*123456*/
____new_func();
____old_func();
____/*123457*/
____new_func2();
____old_func2();
____return 0;
}
char bar()
{
____/*234567*/
____old_func();
}
次のような感じで取り出すことができます。
int foo()
/*123456*/
/*123457*/
char bar()
/*234567*/
もちろん、関数の型名だけ独立した行
int
foo()
{
みたいな感じの記法であっても、
int
foo()
/*123456*/
/*123457*/
char
bar()
/*234567*/
のように取り出せます。
No.8
- 回答日時:
う~ん、何となく事情はわかりましたが、
ソース管理使わず、ソースの修正を人手でマ―ジ
してます なんてことが客先に漏れると恐らく
大変なことになるので、注意しましょう。
で、きちんと修正箇所がソースに残っていて連番がバグや仕様変更と
結びついているなら、全ソースを目やエディタの検索で洗っても、20~30kなら
たいした作業ではないはずだけどなあ。
問題点はどこなんでしょう?
No.7
- 回答日時:
> 改修箇所については、関数内の改修箇所の直前に連番が必ず振られています。
> 1.現在のソースに既に存在する修正箇所について取得は可能であるかどうか。
> (ルールは直前の連番のみ、連番についてはリスト有)
> 2.ソース内の"(過去のものを含む)修正箇所が存在する関数"の関数名を取得する方法はあるかどうか。
> 以上が私の知りたい情報であり、2が最終目標になります。
例えば
……
int hoge(……)
{
……
/*00001*/
…
}
ってなっているのであれば
ソースファイルを頭から読んでいって、
・関数の定義をみつけたら、取りあえずその行を保持する
・その関数内で(行頭に)「連番」をみつけたら、「連番」と「保持した行」を出力する。
で良いのでは?
関数定義や「連番」の抽出はコーディング規約等でパターン化されていると思うので正規表現を使用すればチェックできますよね?
pyhonやrubyのようなスクリプト言語を使用すればできると思います。
(sedやAWKでできるかは知らない)
更にいえばC言語でだって作れないことはないです、簡単ではないけど。
No.6さんも仰っていますが、具体例と使用可能なスクリプト言語を提示していただく必要がありますね。
No.6
- 回答日時:
「改修箇所については、関数内の改修箇所の直前に連番が必ず振られています。
」というなら, 結局のところ行番号がわかればなんとかなるわけだからなんとかなりそうだけど.... 具体的にどうなっているかわかれば.ただ, 厳密にいうと「関数内の改修箇所の直前に連番が必ず振られています」というだけでは「改修箇所がどこまでなのか」はわからないね.
No.5
- 回答日時:
修正前のソースファイルが有れば、ファイル比較ツールを使えば、差異箇所が有る
ファイル名と内容・行番号は分かります。
#この方法では関数名までは無理です。
自分がソース管理ツールが無い環境で作業をする時は、予め自分が担当するソース
のバックアップをしておいて、修正前に比較して差異があれば、それを自分のPCに
保存してから修正するという方法を取ります。
ソースの保存用領域に戻す時も、そこに有るのが修正前のものと同じものかどうか
確認してから。
#複数人での開発で何度も痛い目を見た経験からの自衛策。
つまり、これから自分が加える修正箇所以外は取得は無理と言うことですね。分かりました…
こちらの環境では同ソースを複数人で複数箇所修正する場合もあり、その場合には先輩方にマージして頂いてから保存領域に保存する形をとっております。別ソースの場合でも似たような手法で確認が取れるのですね。ぜひ参考にさせて頂きます!
No.4
- 回答日時:
今からソース管理をしようとした場合であれば、修正前のソースのバックアップが
残して無ければ、以前の修正状態は分からない事になります。
またバージョン管理システム(ツール)を使用すれば、修正履歴を管理ツールの履歴
機能を使用して残す事が可能ですが、数年後に追加・修正を行う場合に、開発時の
環境がそのまま残っていなければ、履歴は失われてしまいます。
新しい技術でも過信は禁物です。
すみません、ソース管理が大事な事は私も重々承知しております。しかし、私の立場が新人であるため今すぐにソース管理を導入するという訳にはいきません。また、質問内容からだんだん離れてる気がするので以下を確認させて下さい。
1.現在のソースに既に存在する修正箇所について取得は可能であるかどうか。(ルールは直前の連番のみ、連番についてはリスト有)
2.ソース内の"(過去のものを含む)修正箇所が存在する関数"の関数名を取得する方法はあるかどうか。
以上が私の知りたい情報であり、2が最終目標になります。
よろしくお願いします。
No.1
- 回答日時:
1)バージョン管理システム(ツール)を使用する
バージョン管理システム
ttps://ja.wikipedia.org/wiki/%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0
Visual SourceSafe、CVS、Subversion等
2)旧ソースをバックアップしておき、ファイル比較ツールを使用する
Diff(ファイル比較)ソフト
ttps://freesoft-100.com/pasokon/diff.html
WinMerge
ttps://forest.watch.impress.co.jp/library/software/winmerge/
DF
ttps://www.vector.co.jp/soft/win95/util/se113286.html
3)修正履歴をソースに記述
修正時に修正日を記述、旧ソースはコメント削除後に追加して、修正履歴を残す。
修正箇所が直ぐに分かる様に、ソースファイル先頭及び関数先頭のコメント部分に
修正日・修正内容を記述する
回答ありがとうございます。
それぞれの方法ですが、前の人が改修した部分について無視する形になると思われますがそこは諦めるしか方法は無いのでしょうか…?
あと関数名の取得について何か方法は無いでしょうか…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 車検・修理・メンテナンス 車修理をディーラーに頼むの時、、 例えば、、 こちらが修理希望の気にはなる箇所の改善にかかる部分は構 5 2023/05/08 13:45
- 事件・事故 韓国のハロウィンイベントについて 5 2022/11/02 08:46
- 車検・修理・メンテナンス 車をぶつけて修理に出しました 3週間預けて返ってきたら全然関係ない場所ですがサイドミラーが開かない閉 9 2023/02/27 15:48
- 事件・事故 ビッグモーター問題について 6 2023/08/19 21:41
- Illustrator(イラストレーター) Illustratorについてなのですが‥ Illustratorの機能で、1箇所に文字を入力するだ 1 2023/06/18 10:37
- 分譲マンション 区分所有法に抵触する規約改正はできますか? 4 2022/11/29 19:44
- デジタルカメラ SDカード復元 5 2022/11/08 12:42
- 国産車 四駆機能の不要無いヒトで、SUVに乗る人は、購入する時、FF選びますか?4駆選びますか? リセール目 7 2022/08/08 18:22
- 一戸建て 新築引渡し後の補修について 13 2022/06/28 00:41
- 軍事学 改修型の95−1式小銃が2010年に採用されたのに、どうして中国人民解放軍は改修前の95式もまだ使っ 5 2023/01/31 07:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ホームページ作成
-
ログインソースを見つけられない
-
レンタルショップGEOのHPの作ら...
-
CSSのfont-weight設定 MACで表...
-
C++ 自動マウスクリック
-
スクロールバーを個別に表示さ...
-
phpとaspの違い? 実力の違い?
-
Xoops初めてです 教えてください
-
blogのソースで、文字化けを直...
-
ソースコピー → ブラウザ文字...
-
VB.NETのソースをDelphiに変換...
-
htmlでソースを表示させたくな...
-
HTMLのソースを見られない...
-
ソースを教えてください
-
【VC++6.0(MFC)】Access Violat...
-
visual basic 2005 では MVC は...
-
【VB.NET】WebページのDOMソー...
-
LED点滅速度
-
Visual Source Safe?
-
初心者 独学で・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ソースの追加行数と変更行数
-
レストラン、英語のメニュー表記
-
generatorとは?
-
#ifdef多用でソースが見づらい
-
VBAで#Regionに変わるものは無...
-
マウスポインタが手の形になら...
-
Dreamweaverのコードカラーが黒...
-
VB詳しい方
-
コメントが閉じてないというエ...
-
Visual Source Safe?
-
ホームページのソースが横長に...
-
有料サイトに飛ばされる
-
c言語の改修されたソースから改...
-
staticな関数をテストする方法...
-
htmlファイルがソースで表示される
-
【VB.NET】WebページのDOMソー...
-
ホームページリンク共有時に指...
-
VC++でマイクを使いたいんですが……
-
縮小版のサムネイルの取得(画像...
-
VisualBasicがインストールされ...
おすすめ情報