JPH10312312A - 仕様によって動作が変わるc言語の計算機プログラム検査処理方法およびプログラム記憶媒体 - Google Patents
仕様によって動作が変わるc言語の計算機プログラム検査処理方法およびプログラム記憶媒体Info
- Publication number
- JPH10312312A JPH10312312A JP9122013A JP12201397A JPH10312312A JP H10312312 A JPH10312312 A JP H10312312A JP 9122013 A JP9122013 A JP 9122013A JP 12201397 A JP12201397 A JP 12201397A JP H10312312 A JPH10312312 A JP H10312312A
- Authority
- JP
- Japan
- Prior art keywords
- language
- program
- compiler
- source program
- pattern
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【課題】C言語で記述されたソースプログラムからコン
パイラが準拠する言語の仕様によって動作が変わる箇所
を自動的に検出または修正し,プログラムの開発を容易
にする。 【解決手段】C言語で記述されたCソースプログラム2
を入力し,例えばK&R仕様や標準C仕様等のコンパイ
ラが準拠する仕様によって動作に差異のあるパタンを,
入力したソースプログラムを解析することによって検出
する。その検出したパタンに該当するソースプログラム
が記述されているファイル名,行番号,オブジェクトを
表す名前と演算に関する情報を検出メッセージ4として
出力する。また,動作が変わらないようにソースプログ
ラムを自動修正する。
パイラが準拠する言語の仕様によって動作が変わる箇所
を自動的に検出または修正し,プログラムの開発を容易
にする。 【解決手段】C言語で記述されたCソースプログラム2
を入力し,例えばK&R仕様や標準C仕様等のコンパイ
ラが準拠する仕様によって動作に差異のあるパタンを,
入力したソースプログラムを解析することによって検出
する。その検出したパタンに該当するソースプログラム
が記述されているファイル名,行番号,オブジェクトを
表す名前と演算に関する情報を検出メッセージ4として
出力する。また,動作が変わらないようにソースプログ
ラムを自動修正する。
Description
【0001】
【発明の属する技術分野】プログラム言語C(JIS X 30
10-1993, ISO/IEC 9899:1990)を利用して作成された計
算機プログラムの検査処理方法であって,特に,Cプロ
グラムからコンパイラが準拠するC言語の仕様によって
動作が変わる箇所を検出するC言語の計算機プログラム
検査処理方法およびそれを実現するためのプログラム記
憶媒体に関するものである。
10-1993, ISO/IEC 9899:1990)を利用して作成された計
算機プログラムの検査処理方法であって,特に,Cプロ
グラムからコンパイラが準拠するC言語の仕様によって
動作が変わる箇所を検出するC言語の計算機プログラム
検査処理方法およびそれを実現するためのプログラム記
憶媒体に関するものである。
【0002】
【従来の技術】計算機プログラム言語Cには,他の言語
同様にいくつかの方言がある。伝統的な方言の一つに,
「石田晴久訳:プログラミング言語C UNIX流プロ
グラム書法と作法,共立出版,1981年」で解説されてい
るK&Rと呼ばれる仕様がある。K&R仕様によるC言
語の計算機プログラムは,永きにわたり利用され,多く
のプログラムが作られている。
同様にいくつかの方言がある。伝統的な方言の一つに,
「石田晴久訳:プログラミング言語C UNIX流プロ
グラム書法と作法,共立出版,1981年」で解説されてい
るK&Rと呼ばれる仕様がある。K&R仕様によるC言
語の計算機プログラムは,永きにわたり利用され,多く
のプログラムが作られている。
【0003】一方,標準C仕様は,K&R仕様の不明確
な箇所を補充する他,これまでの仕様を改良して定めら
れた。両者の差異の内,構文規則に関する仕様は単純で
あるため,K&R仕様で作成されたプログラムを受理す
る標準C仕様準拠コンパイラは作成されてきている。し
かし,意味(動作)上の差異があることを正確に警告す
るコンパイラはなかった。
な箇所を補充する他,これまでの仕様を改良して定めら
れた。両者の差異の内,構文規則に関する仕様は単純で
あるため,K&R仕様で作成されたプログラムを受理す
る標準C仕様準拠コンパイラは作成されてきている。し
かし,意味(動作)上の差異があることを正確に警告す
るコンパイラはなかった。
【0004】
【発明が解決しようとする課題】C言語仕様の標準化に
ともない,K&R仕様準拠コンパイラだけでなく,標準
C仕様準拠コンパイラを利用できるようになってきた。
このような状況下におけるプログラムの開発において,
一方の仕様に準拠したコンパイラによってのみ意図どお
りに解釈されるプログラムを作成するという方針を採る
のが一般的であるが,準拠している仕様が異なる複数の
コンパイラによって意図どおり解釈されるようにプログ
ラムを作成したい場合がある。この場合,両者の仕様に
は意味上の違いがあるため,適切な制約の下に十分注意
してソースプログラムを作成しなければならないという
課題がある。
ともない,K&R仕様準拠コンパイラだけでなく,標準
C仕様準拠コンパイラを利用できるようになってきた。
このような状況下におけるプログラムの開発において,
一方の仕様に準拠したコンパイラによってのみ意図どお
りに解釈されるプログラムを作成するという方針を採る
のが一般的であるが,準拠している仕様が異なる複数の
コンパイラによって意図どおり解釈されるようにプログ
ラムを作成したい場合がある。この場合,両者の仕様に
は意味上の違いがあるため,適切な制約の下に十分注意
してソースプログラムを作成しなければならないという
課題がある。
【0005】また,以前に作成したソースプログラム
を,作成した時にターゲットとしていなかった仕様に準
拠するコンパイラを利用して意図どおり動作させる場合
に,プログラムの規模が大きければなおのこと,どこを
修正すればよいかを特定することが非常に困難であっ
た。
を,作成した時にターゲットとしていなかった仕様に準
拠するコンパイラを利用して意図どおり動作させる場合
に,プログラムの規模が大きければなおのこと,どこを
修正すればよいかを特定することが非常に困難であっ
た。
【0006】本発明は上記問題点の解決を図り,C言語
で記述されたソースプログラムからコンパイラが準拠す
るC言語の仕様によって動作が変わる箇所を,自動的に
検出し,さらに動作が変わらないように修正できるなら
ば自動修正する手段を提供することを目的とする。
で記述されたソースプログラムからコンパイラが準拠す
るC言語の仕様によって動作が変わる箇所を,自動的に
検出し,さらに動作が変わらないように修正できるなら
ば自動修正する手段を提供することを目的とする。
【0007】
【課題を解決するための手段】K&R仕様書と標準C仕
様書から,構文上の差異,意味上の差異,特に整数型
(char型,short 型,int 型,long型とそれぞれの符号
無型)のオブジェクトに関して差異が生じるパタン(オ
ブジェクトに対する演算とオブジェクト間の演算)を抽
出する。該当パタンを,C言語で記述されたソースプロ
グラムから,ファイル名,行番号,オブジェクトを表す
名前と演算とで特定して検出する。
様書から,構文上の差異,意味上の差異,特に整数型
(char型,short 型,int 型,long型とそれぞれの符号
無型)のオブジェクトに関して差異が生じるパタン(オ
ブジェクトに対する演算とオブジェクト間の演算)を抽
出する。該当パタンを,C言語で記述されたソースプロ
グラムから,ファイル名,行番号,オブジェクトを表す
名前と演算とで特定して検出する。
【0008】ソースプログラムからの検出を進めるに当
たり,一つのソースプログラムについてコンパイラの仕
様によって異なる解釈をしなければならない事態に陥る
ことがある。例えば,long型オブジェクトの大きさが4
バイトのとき,次のプログラム1の動作を,K&Rコン
パイラはプログラム2と同じと解釈するが,標準Cコン
パイラはプログラム3と同じと解釈する。
たり,一つのソースプログラムについてコンパイラの仕
様によって異なる解釈をしなければならない事態に陥る
ことがある。例えば,long型オブジェクトの大きさが4
バイトのとき,次のプログラム1の動作を,K&Rコン
パイラはプログラム2と同じと解釈するが,標準Cコン
パイラはプログラム3と同じと解釈する。
【0009】[プログラム1] #if 0xffffffff>0 f(int a){return a; } #else g(int b){return b; } #endif [プログラム2] g(int b){return b; } [プログラム3] f(int a){return a; } このようにコンパイラが準拠する仕様によって異なる解
釈が必要な場合に備えて,検査の前にどちらの仕様に従
って検出を進めるかを定めておく。
釈が必要な場合に備えて,検査の前にどちらの仕様に従
って検出を進めるかを定めておく。
【0010】例えば,K&R仕様準拠コンパイラと標準
C仕様準拠コンパイラとで,翻訳結果のプログラムの動
作に差異があるパタンとして,ソースプログラムから抽
出するパタンは,以下のパタンである。
C仕様準拠コンパイラとで,翻訳結果のプログラムの動
作に差異があるパタンとして,ソースプログラムから抽
出するパタンは,以下のパタンである。
【0011】(1) 3文字表記 例 ??= (2) entry という名前の識別子 (3) const, volatile, signed, void という名前の識別
子 (4) ブロック内での外部宣言 (5) 整数型定数の型を明示する接尾語 u, U, ul, UL, U
l, uL, lu, Lu, lU, LU (6) 浮動小数点型定数を明示する接尾語 f, F, l, L, l
f, fl, lF, Fl, Lf, fL (7) 広角文字定数,広角文字列リテラル (8) 二文字以上で構成される文字定数 (9) 文字定数 \a, \v, \", \? (ここで, \の表記は半
角の逆スラント「\」の代用である。) (10)文字列の連結 例) "abc" "def"が "abcdef" と標準C仕様では解釈す
るが,K&R仕様では文字列の連結はできない。
子 (4) ブロック内での外部宣言 (5) 整数型定数の型を明示する接尾語 u, U, ul, UL, U
l, uL, lu, Lu, lU, LU (6) 浮動小数点型定数を明示する接尾語 f, F, l, L, l
f, fl, lF, Fl, Lf, fL (7) 広角文字定数,広角文字列リテラル (8) 二文字以上で構成される文字定数 (9) 文字定数 \a, \v, \", \? (ここで, \の表記は半
角の逆スラント「\」の代用である。) (10)文字列の連結 例) "abc" "def"が "abcdef" と標準C仕様では解釈す
るが,K&R仕様では文字列の連結はできない。
【0012】(11)unsigned short型あるいはunsigned c
har 型と符号付整数型との<,<=,>,>=,*,/
演算 (12)unsigned short型あるいはunsigned char 型と負値
の整定数との<,<=,>,>=,*,/演算 (13)231以上232未満の値をもつ整定数と符号付型との
<,<=,>,>=演算 (14)関数へのポインタ変数の宣言 (15)単項の+演算子 (16)シフト演算の左辺がlong型,unsigned long 型でな
く,右辺がlong型もしくはunsigned long 型 (17)定数式中の&&,‖,単項 &,!,キャスト演算 (18)未定義の ptrdiff_t ,size_t , wchar_t 型の
オブジェクト宣言 (19)long double 型のオブジェクト宣言 (20)関数型,配列型のオブジェクト宣言 (21)プロトタイプ宣言 (22)返す型が構造体,共用体の関数定義と呼びだし (23)初期設定付の外部変数の定義 (24)共用体の初期化 (25)自動変数として宣言されている配列,構造体,共用
体の初期化 (26)int 型でないcase名札 (27)引き数が可変個となる関数定義 (28)引き数の個数が可変個の関数の呼びだし (29)仮引き数の並びを括弧内に記した関数定義 (30)定義のない外部変数の宣言 (31) #の前に空白文字がある前処理指令行 (32)defined を含む前処理指令 (33) #elifという前処理指令 (34) #include のファイル指定にマクロが存在 (35)関数形式マクロの定義の置換の並びの中の文字,文
字列の中にマクロ引き数 (36)置換の並びの中の文字,文字列の中にマクロ引き数
がある定義をもつマクロの呼びだし (37)再帰的定義のマクロ定義 (38)再帰的定義のマクロの呼びだし (39) #,##演算子を利用したマクロ定義 (40) #,##演算子を用いたマクロの呼びだし (41)「#line 前処理字句列 改行」という形式の前処理
指令 (42)「#error 」という形式の前処理指令 (43)「#pragma 」という形式の前処理指令 (44)「# 」以外が空白という形式の前処理指令 以上の(1) 〜(44)のパタンをソースプログラムから検出
し,その検出結果を出力する。以上のパタンを検出でき
れば,コンパイラが準拠する仕様による動作の差異のた
めに予期しない動作が生じるようなことに対して,事前
に対処することができる。なお,パタンごとに検出する
かどうかを検査の前に指定させて,特定のパタンのみを
検出するようにすることもできる。検出結果に従って,
検査したソースプログラムを自動修正することも可能で
ある。
har 型と符号付整数型との<,<=,>,>=,*,/
演算 (12)unsigned short型あるいはunsigned char 型と負値
の整定数との<,<=,>,>=,*,/演算 (13)231以上232未満の値をもつ整定数と符号付型との
<,<=,>,>=演算 (14)関数へのポインタ変数の宣言 (15)単項の+演算子 (16)シフト演算の左辺がlong型,unsigned long 型でな
く,右辺がlong型もしくはunsigned long 型 (17)定数式中の&&,‖,単項 &,!,キャスト演算 (18)未定義の ptrdiff_t ,size_t , wchar_t 型の
オブジェクト宣言 (19)long double 型のオブジェクト宣言 (20)関数型,配列型のオブジェクト宣言 (21)プロトタイプ宣言 (22)返す型が構造体,共用体の関数定義と呼びだし (23)初期設定付の外部変数の定義 (24)共用体の初期化 (25)自動変数として宣言されている配列,構造体,共用
体の初期化 (26)int 型でないcase名札 (27)引き数が可変個となる関数定義 (28)引き数の個数が可変個の関数の呼びだし (29)仮引き数の並びを括弧内に記した関数定義 (30)定義のない外部変数の宣言 (31) #の前に空白文字がある前処理指令行 (32)defined を含む前処理指令 (33) #elifという前処理指令 (34) #include のファイル指定にマクロが存在 (35)関数形式マクロの定義の置換の並びの中の文字,文
字列の中にマクロ引き数 (36)置換の並びの中の文字,文字列の中にマクロ引き数
がある定義をもつマクロの呼びだし (37)再帰的定義のマクロ定義 (38)再帰的定義のマクロの呼びだし (39) #,##演算子を利用したマクロ定義 (40) #,##演算子を用いたマクロの呼びだし (41)「#line 前処理字句列 改行」という形式の前処理
指令 (42)「#error 」という形式の前処理指令 (43)「#pragma 」という形式の前処理指令 (44)「# 」以外が空白という形式の前処理指令 以上の(1) 〜(44)のパタンをソースプログラムから検出
し,その検出結果を出力する。以上のパタンを検出でき
れば,コンパイラが準拠する仕様による動作の差異のた
めに予期しない動作が生じるようなことに対して,事前
に対処することができる。なお,パタンごとに検出する
かどうかを検査の前に指定させて,特定のパタンのみを
検出するようにすることもできる。検出結果に従って,
検査したソースプログラムを自動修正することも可能で
ある。
【0013】
【発明の実施の形態】図1は,本発明の概要説明図であ
る。図中,1はCPUおよびメモリ等からなる処理装
置,2は検査対象のCソースプログラム,3は検査条件
や抑止条件等の指定情報,4は検査結果の検出メッセー
ジ,5は自動修正した修正ソースプログラム,10はC
ソースプログラムからコンパイラが準拠する言語の仕様
によって動作に差異のある箇所を検出するCプログラム
検査部を表す。
る。図中,1はCPUおよびメモリ等からなる処理装
置,2は検査対象のCソースプログラム,3は検査条件
や抑止条件等の指定情報,4は検査結果の検出メッセー
ジ,5は自動修正した修正ソースプログラム,10はC
ソースプログラムからコンパイラが準拠する言語の仕様
によって動作に差異のある箇所を検出するCプログラム
検査部を表す。
【0014】Cプログラム検査部10は,Cソースプロ
グラム2を入力し,Cソースプログラム2の構文解析お
よび意味解析を行い,コンパイラが準拠する言語の仕様
によって動作に差異のあるパタンを検出する。このと
き,検査条件指定または抑止条件指定の指定情報3があ
れば,その条件に従って検出する。
グラム2を入力し,Cソースプログラム2の構文解析お
よび意味解析を行い,コンパイラが準拠する言語の仕様
によって動作に差異のあるパタンを検出する。このと
き,検査条件指定または抑止条件指定の指定情報3があ
れば,その条件に従って検出する。
【0015】また,Cプログラム検査部10は,Cソー
スプログラム2中で検出したパタンの部分を,コンパイ
ラが準拠する仕様が変わっても動作が変わらない記述,
または意図した所定の動作となるような記述に自動修正
する手段を持つ。
スプログラム2中で検出したパタンの部分を,コンパイ
ラが準拠する仕様が変わっても動作が変わらない記述,
または意図した所定の動作となるような記述に自動修正
する手段を持つ。
【0016】図2は,本発明の実施の形態に係るモジュ
ール構成図である。図2のCプログラムチェッカ20お
よびプリプロセッサ24は,図1のCプログラム検査部
10に相当する。この例では,Cプログラムチェッカ2
0およびプリプロセッサ24は,UNIXオペレーティ
ングシステム上で動作し,ソースファイル32等からC
言語で記述されたソースプログラムを入力して構文解析
および意味解析を行い,前述したパタンを検出して,検
出結果の検出メッセージ4をファイルあるいは端末に出
力する。
ール構成図である。図2のCプログラムチェッカ20お
よびプリプロセッサ24は,図1のCプログラム検査部
10に相当する。この例では,Cプログラムチェッカ2
0およびプリプロセッサ24は,UNIXオペレーティ
ングシステム上で動作し,ソースファイル32等からC
言語で記述されたソースプログラムを入力して構文解析
および意味解析を行い,前述したパタンを検出して,検
出結果の検出メッセージ4をファイルあるいは端末に出
力する。
【0017】Cプログラムを検査するための手段は,4
つの論理的な機能区分(カスタマイザ23,プリプロセ
ッサ24,チェッカ本体21,ポストプロセッサ22)
から構成され,カスタマイザ23,プリプロセッサ2
4,Cプログラムチェッカ20の3つのロードモジュー
ルから構成される(図2)。
つの論理的な機能区分(カスタマイザ23,プリプロセ
ッサ24,チェッカ本体21,ポストプロセッサ22)
から構成され,カスタマイザ23,プリプロセッサ2
4,Cプログラムチェッカ20の3つのロードモジュー
ルから構成される(図2)。
【0018】カスタマイザ23は,Cプログラムのチェ
ッカ起動時に一度だけ実行され,Cプログラムチェッカ
20の起動時に指定されたオプション,起動オプション
が指定されないときどのように解釈するかを記述したデ
フォルト情報ファイル30とカスタマイズファイル31
とから,カスタマイズ情報テーブルファイル35を作成
する。
ッカ起動時に一度だけ実行され,Cプログラムチェッカ
20の起動時に指定されたオプション,起動オプション
が指定されないときどのように解釈するかを記述したデ
フォルト情報ファイル30とカスタマイズファイル31
とから,カスタマイズ情報テーブルファイル35を作成
する。
【0019】作成されたカスタマイズ情報テーブルファ
イル35には,どのケースの検査をすべきかの情報や,
sizeof(char)の値,sizeof(short) の値,sizeof(int)
の値,sizeof(long)の値,size_t , ptrdiff_t , w
char_t の型,ソースプログラムが参照するヘッダファ
イルがどのディレクトリにあるかの情報,プログラム起
動時のオプションや環境変数等を保存している。プログ
ラム起動時のオプションは,ここではUNIXのCコン
パイラに倣った内容としている。ヘッダファイル,環境
変数等についてはUNIXシステム等において知られて
いるので,ここでの詳細な説明は省略する。
イル35には,どのケースの検査をすべきかの情報や,
sizeof(char)の値,sizeof(short) の値,sizeof(int)
の値,sizeof(long)の値,size_t , ptrdiff_t , w
char_t の型,ソースプログラムが参照するヘッダファ
イルがどのディレクトリにあるかの情報,プログラム起
動時のオプションや環境変数等を保存している。プログ
ラム起動時のオプションは,ここではUNIXのCコン
パイラに倣った内容としている。ヘッダファイル,環境
変数等についてはUNIXシステム等において知られて
いるので,ここでの詳細な説明は省略する。
【0020】プリプロセッサ24は,ソースファイル3
2,プロトタイプファイル33,マクロ定義ファイル3
4を読み込み,Cソースプログラムの中に記述されてい
る#から始まる行(行制御,ファイル取り込み,マクロ
定義)とマクロの展開を行い,前記パタンに該当する箇
所が見つかれば,エラーファイル37に出力し,マクロ
展開した内容をチェッカ本体21が読むように出力す
る。このファイルを図2では中間ファイル36として示
している。
2,プロトタイプファイル33,マクロ定義ファイル3
4を読み込み,Cソースプログラムの中に記述されてい
る#から始まる行(行制御,ファイル取り込み,マクロ
定義)とマクロの展開を行い,前記パタンに該当する箇
所が見つかれば,エラーファイル37に出力し,マクロ
展開した内容をチェッカ本体21が読むように出力す
る。このファイルを図2では中間ファイル36として示
している。
【0021】チェッカ本体21は,プリプロセッサ24
の出力した中間ファイル36を読み込んで,構文解析,
意味解析を行い,前記パタンに該当する箇所が見つかれ
ば,その情報をエラーファイル37に出力する。
の出力した中間ファイル36を読み込んで,構文解析,
意味解析を行い,前記パタンに該当する箇所が見つかれ
ば,その情報をエラーファイル37に出力する。
【0022】ポストプロセッサ22は,プリプロセッサ
24およびチェッカ本体21によってエラーファイル3
7に出力された内容をマージし,カスタマイズ情報テー
ブルファイル35に記述された内容に従って編集して,
それらを検出メッセージ4として出力する。また,カス
タマイズ情報テーブルファイル35に記述された内容に
従って,整数型のオブジェクトの大きさが変わっても動
作が変わらないようにソースプログラムを修正できる場
合には自動修正して,その修正結果を修正ソースファイ
ル40に出力する。
24およびチェッカ本体21によってエラーファイル3
7に出力された内容をマージし,カスタマイズ情報テー
ブルファイル35に記述された内容に従って編集して,
それらを検出メッセージ4として出力する。また,カス
タマイズ情報テーブルファイル35に記述された内容に
従って,整数型のオブジェクトの大きさが変わっても動
作が変わらないようにソースプログラムを修正できる場
合には自動修正して,その修正結果を修正ソースファイ
ル40に出力する。
【0023】以上のように各モジュールが順に動作し,
作成したCソースプログラムを格納したソースファイル
32を読み込んで,前記パタンに一致する箇所をそのフ
ァイル名と行番号,パタンとそれの構成要素である識別
子あるいは整定数を含んで検出する。
作成したCソースプログラムを格納したソースファイル
32を読み込んで,前記パタンに一致する箇所をそのフ
ァイル名と行番号,パタンとそれの構成要素である識別
子あるいは整定数を含んで検出する。
【0024】以上の処理において補助的に用いられるフ
ァイルについて簡単に説明する。カスタマイズファイル
31は,Cプログラムチェッカの起動時に指定できるオ
プションが指定されなかった場合にどのような解釈をす
るかを記述したファイルである。
ァイルについて簡単に説明する。カスタマイズファイル
31は,Cプログラムチェッカの起動時に指定できるオ
プションが指定されなかった場合にどのような解釈をす
るかを記述したファイルである。
【0025】デフォルト情報ファイル30は,Cプログ
ラムチェッカ20の起動時のオプションで指定しない情
報について指定するファイルであり,例えば,マクロや
型をソースプログラムで定義されているのと同様に定義
する。これはCコンパイラが内部で定義しているプロセ
ッサやオペレーティング・システム(OS)の名前をも
つ識別子を,Cプログラムチェッカ20が倣って定義す
るために利用する。
ラムチェッカ20の起動時のオプションで指定しない情
報について指定するファイルであり,例えば,マクロや
型をソースプログラムで定義されているのと同様に定義
する。これはCコンパイラが内部で定義しているプロセ
ッサやオペレーティング・システム(OS)の名前をも
つ識別子を,Cプログラムチェッカ20が倣って定義す
るために利用する。
【0026】メッセージファイル38は,Cプログラム
チェッカ20が出力するメッセージの雛型(出力時に埋
めるファイル名,行番号,オブジェクト名を除いたメッ
セージ等)を格納しているファイルである。
チェッカ20が出力するメッセージの雛型(出力時に埋
めるファイル名,行番号,オブジェクト名を除いたメッ
セージ等)を格納しているファイルである。
【0027】演算結果ファイル39は,次のようなもの
である。C言語ではint 型より大きさが小さい整数型の
オブジェクトは,演算する場合に一度int 型またはunsi
gned型に変換されてから演算される(この変換をプロモ
ーションと呼ぶ)。この変換は,ケースに依存する。例
えば,sizeof(int) =4,sizeof(short) =2のとき,
K&Rであればunsigned short型はunsigned型に変換さ
れてから演算されるが,標準Cのときには,int 型に変
換されてから演算される。演算結果ファイル39は,こ
の処理のためのもので,各型のオブジェクトが各ケース
のときにどの型に変換されるかを記述して保存している
ものである。
である。C言語ではint 型より大きさが小さい整数型の
オブジェクトは,演算する場合に一度int 型またはunsi
gned型に変換されてから演算される(この変換をプロモ
ーションと呼ぶ)。この変換は,ケースに依存する。例
えば,sizeof(int) =4,sizeof(short) =2のとき,
K&Rであればunsigned short型はunsigned型に変換さ
れてから演算されるが,標準Cのときには,int 型に変
換されてから演算される。演算結果ファイル39は,こ
の処理のためのもので,各型のオブジェクトが各ケース
のときにどの型に変換されるかを記述して保存している
ものである。
【0028】カスタマイズ情報テーブルファイル35
は,カスタマイズファイル31と起動オプションとを解
析して編集したファイルである。中間ファイル36は,
プロプロセッサ24が#includeや#define,マクロの展開
を行った結果と定義されているシンボル一覧を出力する
ファイルである。
は,カスタマイズファイル31と起動オプションとを解
析して編集したファイルである。中間ファイル36は,
プロプロセッサ24が#includeや#define,マクロの展開
を行った結果と定義されているシンボル一覧を出力する
ファイルである。
【0029】エラーファイル37は,プリプロセッサ2
4,チェッカ本体21が検出した内容を一旦保持してお
くファイルである。シンボルテーブル50〜52は,プ
ログラム中のシンボル情報を記憶するテーブルであり,
トークンテーブル53は,プログラム中で括弧やコロン
等の区切り記号で区切られた単位の情報を記憶するテー
ブルである。
4,チェッカ本体21が検出した内容を一旦保持してお
くファイルである。シンボルテーブル50〜52は,プ
ログラム中のシンボル情報を記憶するテーブルであり,
トークンテーブル53は,プログラム中で括弧やコロン
等の区切り記号で区切られた単位の情報を記憶するテー
ブルである。
【0030】一般にCプログラムの開発では,下記のケ
ースのいずれかを開発条件とすることが多い。 [ケース1] コンパイラの仕様としてK&Rのみ [ケース2] コンパイラの仕様として標準C(ANS
I)のみ [ケース3] コンパイラの仕様としてK&Rと標準C
(ANSI) また,char型の値の範囲についても開発条件としてい
る。
ースのいずれかを開発条件とすることが多い。 [ケース1] コンパイラの仕様としてK&Rのみ [ケース2] コンパイラの仕様として標準C(ANS
I)のみ [ケース3] コンパイラの仕様としてK&Rと標準C
(ANSI) また,char型の値の範囲についても開発条件としてい
る。
【0031】そこで,以上のような各種の開発条件に対
応した検査を可能とするために,Cプログラムチェッカ
20に対して,検査条件を指定することができる。図3
は,検査条件指定の説明図である。
応した検査を可能とするために,Cプログラムチェッカ
20に対して,検査条件を指定することができる。図3
は,検査条件指定の説明図である。
【0032】図3(A)は,コンパイラが準拠する仕様
に関する選択肢であり,検査者は「K&Rのみ」,「A
NSIのみ」,「K&RとANSI」の3つの選択肢の
中からどれかを指定することができる。また,図3
(B)は,char型の値の範囲に関する選択肢であり,
「非負のみ」,「負もある」,「どれでも」の中から検
索条件を指定することができる。ここで,「K&RとA
NSI」および「どれでも」という条件が含まれる場合
には,いくつかの環境で検査対象のプログラムを動作さ
せたいというプログラム開発者の意思がある。そこで,
これらを含む条件の場合に動作が変わる箇所をプログラ
ムから検出する。
に関する選択肢であり,検査者は「K&Rのみ」,「A
NSIのみ」,「K&RとANSI」の3つの選択肢の
中からどれかを指定することができる。また,図3
(B)は,char型の値の範囲に関する選択肢であり,
「非負のみ」,「負もある」,「どれでも」の中から検
索条件を指定することができる。ここで,「K&RとA
NSI」および「どれでも」という条件が含まれる場合
には,いくつかの環境で検査対象のプログラムを動作さ
せたいというプログラム開発者の意思がある。そこで,
これらを含む条件の場合に動作が変わる箇所をプログラ
ムから検出する。
【0033】検査条件は,図3(A),(B)のそれぞ
れの場合の積だけ存在することになるので,検査条件
は,3×3=9通りあることになる。また,不要な検出
メッセージ4を出力しないようにするため,または不要
な自動修正をしないようにするため,Cプログラムチェ
ッカ20に対して,抑止条件を指定することもできる。
抑止条件の対象としては,ファイルとパタンを選択する
ことができ,対象ファイルの指定では,前述したパタン
があっても検出しないファイルおよびプログラムの行を
指定することができる。対象パタンの指定では,前述し
た(1) 〜(44)のパタンのうち,検出を抑止するパタンを
指定することができる。
れの場合の積だけ存在することになるので,検査条件
は,3×3=9通りあることになる。また,不要な検出
メッセージ4を出力しないようにするため,または不要
な自動修正をしないようにするため,Cプログラムチェ
ッカ20に対して,抑止条件を指定することもできる。
抑止条件の対象としては,ファイルとパタンを選択する
ことができ,対象ファイルの指定では,前述したパタン
があっても検出しないファイルおよびプログラムの行を
指定することができる。対象パタンの指定では,前述し
た(1) 〜(44)のパタンのうち,検出を抑止するパタンを
指定することができる。
【0034】次に検査後の自動修正の例について説明す
る。図4は,Cソースプログラムについての自動修正の
例を示している。例えば検査対象が,図4に示すような
Cソースプログラム2であったとする。ここで,K&R
仕様とANSI仕様とで動作を変えたくないものとす
る。
る。図4は,Cソースプログラムについての自動修正の
例を示している。例えば検査対象が,図4に示すような
Cソースプログラム2であったとする。ここで,K&R
仕様とANSI仕様とで動作を変えたくないものとす
る。
【0035】このCソースプログラム2について,前述
したパタン抽出を行うと「(11)unsigned short型あるい
はunsigned char 型と符号付整数型との<,<=,>,
>=,*,/演算」のパタンが該当する。
したパタン抽出を行うと「(11)unsigned short型あるい
はunsigned char 型と符号付整数型との<,<=,>,
>=,*,/演算」のパタンが該当する。
【0036】このプログラムでは,「i<us」の部分(i
とusの値の比較結果) がK&R仕様とANSI仕様とで
変わる。これは,K&R仕様では,unsigned short型の
プロモーション後の型がunsigned型であるのに対し,A
NSI仕様では,int 型であることに起因する。そこ
で,K&R仕様でもANSI仕様でも動作が変わらない
ようにするには,図4に示すような修正ソースプログラ
ム5に修正すればよい。すなわち,動作の差異をなくす
ために,「i<(int)us 」のように大小比較する変数の型
を予め整合させる。このような自動修正は,前記パタン
に対応したルーチンを用意することにより実現すること
ができる。
とusの値の比較結果) がK&R仕様とANSI仕様とで
変わる。これは,K&R仕様では,unsigned short型の
プロモーション後の型がunsigned型であるのに対し,A
NSI仕様では,int 型であることに起因する。そこ
で,K&R仕様でもANSI仕様でも動作が変わらない
ようにするには,図4に示すような修正ソースプログラ
ム5に修正すればよい。すなわち,動作の差異をなくす
ために,「i<(int)us 」のように大小比較する変数の型
を予め整合させる。このような自動修正は,前記パタン
に対応したルーチンを用意することにより実現すること
ができる。
【0037】なお,図4に示すCソースプログラム2に
対する検査結果の出力は,例えば「ファイル名:行:i
とusとはK&R/ANSI依存」というような検出メ
ッセージであり,自動修正を行わない場合でも,この検
出メッセージによってプログラム開発者に注意を促すこ
とができる。
対する検査結果の出力は,例えば「ファイル名:行:i
とusとはK&R/ANSI依存」というような検出メ
ッセージであり,自動修正を行わない場合でも,この検
出メッセージによってプログラム開発者に注意を促すこ
とができる。
【0038】この検出メッセージにおいて,「ファイル
名」の部分には,このCソースプログラム2が格納され
ているファイルのファイル名,「行」の部分には「i<u
s」が記述されている行の行番号が埋め込まれる。
名」の部分には,このCソースプログラム2が格納され
ているファイルのファイル名,「行」の部分には「i<u
s」が記述されている行の行番号が埋め込まれる。
【0039】図5は,図2に示すプリプロセッサ24の
フローチャートである。プリプロセッサ24は,まずス
テップS1では,エラー中断時に制御を移すべき処理の
登録を行う。次に,環境変数,起動オプションの取得を
行い,内部テーブルに設定する(S2)。さらに,トー
クンテーブルの初期化,シンボルテーブルの初期化を行
い(S3,S4),続いてカスタマイズ情報の取得およ
びカスタマイズ情報テーブルファイル35への初期化を
行う(S5)。また,マクロ定義ファイル34およびプ
ロトタイプファイル33の読み込みを行い,内部への初
期化を行う(S6)。
フローチャートである。プリプロセッサ24は,まずス
テップS1では,エラー中断時に制御を移すべき処理の
登録を行う。次に,環境変数,起動オプションの取得を
行い,内部テーブルに設定する(S2)。さらに,トー
クンテーブルの初期化,シンボルテーブルの初期化を行
い(S3,S4),続いてカスタマイズ情報の取得およ
びカスタマイズ情報テーブルファイル35への初期化を
行う(S5)。また,マクロ定義ファイル34およびプ
ロトタイプファイル33の読み込みを行い,内部への初
期化を行う(S6)。
【0040】以上の初期化処理の後,ステップS7で
は,ソースファイル32から順次,検査対象のプログラ
ムを読み込む。ステップS8の判定により「#」から始
まる行のときは,ステップS9へ進み。次の前処理指令
かを判断する。
は,ソースファイル32から順次,検査対象のプログラ
ムを読み込む。ステップS8の判定により「#」から始
まる行のときは,ステップS9へ進み。次の前処理指令
かを判断する。
【0041】#if,#ifdef,#ifndef,#elif,#endif,#else,
#include,#define,#line,#error,#pragma,#ident このいずれかであれば,その前処理指令に対応した処理
を行い(S10),検出パタンに一致するかどうかを判
定する(S11)。検出パタンに一致しなければ,ステ
ップS7へ戻る。検出パタンに一致すれば,診断メッセ
ージをエラーファイル37へ出力し(S12),その
後,ステップS7へ戻る。
#include,#define,#line,#error,#pragma,#ident このいずれかであれば,その前処理指令に対応した処理
を行い(S10),検出パタンに一致するかどうかを判
定する(S11)。検出パタンに一致しなければ,ステ
ップS7へ戻る。検出パタンに一致すれば,診断メッセ
ージをエラーファイル37へ出力し(S12),その
後,ステップS7へ戻る。
【0042】ステップS9で前処理指令でないと判断し
た場合には,構文エラーのメッセージを出力し(S1
3),エラーとして中断処理へ移り(S14),処理を
終了する。
た場合には,構文エラーのメッセージを出力し(S1
3),エラーとして中断処理へ移り(S14),処理を
終了する。
【0043】ステップS8の判定で「#」から始まる行
ではない場合,ステップS15へ進み,通常のコンパイ
ラ等で行われているように,トークンテーブルへの出
力,シンボルテーブルへの出力を行い(S15,S1
6),それらを中間ファイル36へ出力する(S1
7)。以上の処理(S7〜S17)をソースファイル3
2が尽きるまで行い(S18),ソースファイル32が
尽きたら,チェッカ本体21を起動する(S19)。
ではない場合,ステップS15へ進み,通常のコンパイ
ラ等で行われているように,トークンテーブルへの出
力,シンボルテーブルへの出力を行い(S15,S1
6),それらを中間ファイル36へ出力する(S1
7)。以上の処理(S7〜S17)をソースファイル3
2が尽きるまで行い(S18),ソースファイル32が
尽きたら,チェッカ本体21を起動する(S19)。
【0044】図6は,図2に示すチェッカ本体21のフ
ローチャートである。チェッカ本体21は,プリプロセ
ッサ24と同様に,まずステップS21では,エラー中
断時に制御を移すべき処理の登録を行う。次に,環境変
数,起動オプションの取得を行い,内部テーブルに設定
する(S22)。次に,トークンテーブルの読み込み
(S23),シンボルテーブルの読み込み(S24)を
行い,続いてカスタマイズ情報の取得および内部への初
期化を行う(S25)。
ローチャートである。チェッカ本体21は,プリプロセ
ッサ24と同様に,まずステップS21では,エラー中
断時に制御を移すべき処理の登録を行う。次に,環境変
数,起動オプションの取得を行い,内部テーブルに設定
する(S22)。次に,トークンテーブルの読み込み
(S23),シンボルテーブルの読み込み(S24)を
行い,続いてカスタマイズ情報の取得および内部への初
期化を行う(S25)。
【0045】以上の初期化処理の後,ステップS26で
は,プリプロセッサ24の出力を読み込む。それを構文
解析し,内部で構文木を生成する(S27)。そして,
構文木と検出パタンとが一致するかどうかを調べ(S2
8),一致する場合には,診断メッセージをエラーファ
イル37へ出力する(S29)。
は,プリプロセッサ24の出力を読み込む。それを構文
解析し,内部で構文木を生成する(S27)。そして,
構文木と検出パタンとが一致するかどうかを調べ(S2
8),一致する場合には,診断メッセージをエラーファ
イル37へ出力する(S29)。
【0046】次に意味解析し,文を所定の内部形式に変
換する(S30)。なお,構文解析,意味解析等の処理
は,通常のコンパイラで行われている処理と同様である
ので,ここでの詳しい説明は省略する。
換する(S30)。なお,構文解析,意味解析等の処理
は,通常のコンパイラで行われている処理と同様である
ので,ここでの詳しい説明は省略する。
【0047】文を内部形式に変換した後,その内部形式
と検出パタンとが一致するかどうを調べる(S31)。
一致する場合には,診断メッセージをエラーファイル3
7へ出力する(S32)。
と検出パタンとが一致するかどうを調べる(S31)。
一致する場合には,診断メッセージをエラーファイル3
7へ出力する(S32)。
【0048】以上の処理(S26〜S32)をプリプロ
セッサ24の出力ファイルが尽きるまで行い(S3
3),出力ファイルが尽きたら,ポストプロセッサを起
動する(S34)。
セッサ24の出力ファイルが尽きるまで行い(S3
3),出力ファイルが尽きたら,ポストプロセッサを起
動する(S34)。
【0049】図7は,図2に示すポストプロセッサ22
のフローチャートである。ポストプロセッサ22は,ま
ずステップS41でカスタマイズ情報テーブルファイル
35の読み込みを行う。次に,エラーファイル37の読
み込みを行い(S42),読み込んだエラーファイル3
7の内容の診断メッセージを診断対象となったファイ
ル,行の順に並べかえ,中間ファイルを作成する(S4
3)。
のフローチャートである。ポストプロセッサ22は,ま
ずステップS41でカスタマイズ情報テーブルファイル
35の読み込みを行う。次に,エラーファイル37の読
み込みを行い(S42),読み込んだエラーファイル3
7の内容の診断メッセージを診断対象となったファイ
ル,行の順に並べかえ,中間ファイルを作成する(S4
3)。
【0050】次に,作成した中間ファイルから,抑止条
件指定により抑止対象となっている診断メッセージを削
除し,中間ファイルを更新する(S44)。また,この
中間ファイルの内容で,抑止対象となっている診断対象
ファイルに関する診断メッセージを削除する(S4
5)。
件指定により抑止対象となっている診断メッセージを削
除し,中間ファイルを更新する(S44)。また,この
中間ファイルの内容で,抑止対象となっている診断対象
ファイルに関する診断メッセージを削除する(S4
5)。
【0051】残った中間ファイルの内容を検出メッセー
ジ4として,プリンタ,ディスプレイ,ファイル等の出
力装置に出力する(S46)。また,利用者からの指定
と検出結果とに応じて,自動修正が可能であれば,図4
で説明したようなプログラムの自動修正を行い,処理を
終了する。
ジ4として,プリンタ,ディスプレイ,ファイル等の出
力装置に出力する(S46)。また,利用者からの指定
と検出結果とに応じて,自動修正が可能であれば,図4
で説明したようなプログラムの自動修正を行い,処理を
終了する。
【0052】
【実施例】以上のCプログラムチェッカにより,約15
M(千五百万)行のCソースプログラムを調査したとこ
ろ,凡そ10K(一万)行に1箇所の割合でK&Rと標
準Cとで動作が変わる箇所が発見できた。
M(千五百万)行のCソースプログラムを調査したとこ
ろ,凡そ10K(一万)行に1箇所の割合でK&Rと標
準Cとで動作が変わる箇所が発見できた。
【0053】
【発明の効果】以上説明したように,本発明によれば,
コンパイラが準拠する言語の仕様が異なるため,コンパ
イル結果のプログラムの動作が変わる箇所を,自動的に
検出することができるので,各種のコンパイラに応じた
プログラムの開発が容易になり,動作誤りを未然に防止
することが可能になる。さらに,自動修正機能を設ける
ことによって,より一層の労力の軽減および信頼性の向
上が可能になる。
コンパイラが準拠する言語の仕様が異なるため,コンパ
イル結果のプログラムの動作が変わる箇所を,自動的に
検出することができるので,各種のコンパイラに応じた
プログラムの開発が容易になり,動作誤りを未然に防止
することが可能になる。さらに,自動修正機能を設ける
ことによって,より一層の労力の軽減および信頼性の向
上が可能になる。
【図1】本発明の概要説明図である。
【図2】本発明の実施の形態に係るモジュール構成図で
ある。
ある。
【図3】検査条件指定の説明図である。
【図4】Cソースプログラムについての自動修正の例を
示す図である。
示す図である。
【図5】プリプロセッサのフローチャートである。
【図6】チェッカ本体のフローチャートである。
【図7】ポストプロセッサのフローチャートである。
1 処理装置 2 Cソースプログラム 3 指定情報 4 検出メッセージ 5 修正ソースプログラム 10 Cプログラム検査部
Claims (5)
- 【請求項1】 プログラム言語であるC言語を利用して
作成された計算機プログラムからコンパイラが準拠する
C言語の仕様によって動作が変わる箇所を検出する処理
方法であって,C言語で記述されたソースプログラムを
入力する過程と,コンパイラが準拠するC言語の仕様に
よって動作に差異があるパタンを,入力したソースプロ
グラムから検出する過程と,前記検出したパタンに該当
するソースプログラム情報を出力する過程とを有するこ
とを特徴とする仕様によって動作が変わるC言語の計算
機プログラム検査処理方法。 - 【請求項2】 第1の仕様に準拠したコンパイラと第2
の仕様に準拠したコンパイラで動作が変わるパタンをソ
ースプログラムから検出する場合に,第1の仕様または
第2の仕様のどちらか一方に指定して検査を進めること
を特徴とする請求項1記載の仕様によって動作が変わる
C言語の計算機プログラム検査処理方法。 - 【請求項3】 前記パタンごとに検出するかどうかの指
定を検査の前に入力する過程と,指定されたパタンにつ
いてのみ検出した結果を出力する過程とを有することを
特徴とする請求項1記載の仕様によって動作が変わるC
言語の計算機プログラム検査処理方法。 - 【請求項4】 プログラム言語であるC言語を利用して
作成された計算機プログラムからコンパイラが準拠する
C言語の仕様によって動作が変わる箇所を検出する処理
方法であって,C言語で記述されたソースプログラムを
入力する過程と,コンパイラが準拠するC言語の仕様に
よって動作に差異があるパタンを,入力したソースプロ
グラムから検出する過程と,前記検出したパタンに該当
するソースプログラムを,コンパイラが準拠するC言語
の仕様が変わっても動作が変わらないかまたは所定の動
作となるように自動修正する過程とを有することを特徴
とする仕様によって動作が変わるC言語の計算機プログ
ラム検査処理方法。 - 【請求項5】 プログラム言語であるC言語を利用して
作成された計算機プログラムからコンパイラが準拠する
C言語の仕様によって動作が変わる箇所を検出するため
のプログラムを格納した計算機読み取り可能な記憶媒体
であって,C言語で記述されたソースプログラムを入力
する手順と,コンパイラが準拠するC言語の仕様によっ
て動作に差異があるパタンを,入力したソースプログラ
ムから検出する手順と,前記検出したパタンに該当する
ソースプログラムの情報を出力する,またはそのソース
プログラムを,コンパイラが準拠するC言語の仕様が変
わっても動作が変わらないかもしくは所定の動作となる
ように自動修正する手順とを計算機に実行させるプログ
ラムを格納したことを特徴とするプログラム記憶媒体。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP9122013A JPH10312312A (ja) | 1997-05-13 | 1997-05-13 | 仕様によって動作が変わるc言語の計算機プログラム検査処理方法およびプログラム記憶媒体 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP9122013A JPH10312312A (ja) | 1997-05-13 | 1997-05-13 | 仕様によって動作が変わるc言語の計算機プログラム検査処理方法およびプログラム記憶媒体 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH10312312A true JPH10312312A (ja) | 1998-11-24 |
Family
ID=14825423
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP9122013A Pending JPH10312312A (ja) | 1997-05-13 | 1997-05-13 | 仕様によって動作が変わるc言語の計算機プログラム検査処理方法およびプログラム記憶媒体 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH10312312A (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2014016914A (ja) * | 2012-07-11 | 2014-01-30 | Fujitsu Ltd | 拡張言語仕様情報提供方法、拡張言語仕様情報提供プログラム、およびコンパイル装置 |
| CN115617352A (zh) * | 2022-12-02 | 2023-01-17 | 中汽研软件测评(天津)有限公司 | 基于安全编码标准的c代码检测方法、设备和存储介质 |
-
1997
- 1997-05-13 JP JP9122013A patent/JPH10312312A/ja active Pending
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2014016914A (ja) * | 2012-07-11 | 2014-01-30 | Fujitsu Ltd | 拡張言語仕様情報提供方法、拡張言語仕様情報提供プログラム、およびコンパイル装置 |
| CN115617352A (zh) * | 2022-12-02 | 2023-01-17 | 中汽研软件测评(天津)有限公司 | 基于安全编码标准的c代码检测方法、设备和存储介质 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US7757225B2 (en) | Linktime recognition of alternative implementations of programmed functionality | |
| US6901579B1 (en) | Generation of source code from classes and maintaining the comment that indicates the role of the class in the generated source code | |
| US5761510A (en) | Method for error identification in a program interface | |
| US7568196B2 (en) | Initializing virtual machine that subsequently executes application | |
| US6317873B1 (en) | Assembly language translator | |
| CN102365621A (zh) | 使用嵌入式解释器类型和变量的基于解释器的程序语言翻译器 | |
| US8201143B2 (en) | Dynamic mating of a modified user interface with pre-modified user interface code library | |
| JP2002196937A (ja) | 従来のアセンブラを用いた新規の命令を含む命令セットアーキテクチャ用のアセンブリ言語コードをコンパイルする方法 | |
| US8082542B2 (en) | Load time in-lining of subroutines | |
| CN114489653A (zh) | 基于编译器的数据处理方法、装置以及可读存储介质 | |
| US6381736B1 (en) | Method for compile-time type-checking of arguments for externally-specified format strings | |
| US6625807B1 (en) | Apparatus and method for efficiently obtaining and utilizing register usage information during software binary translation | |
| US20020049698A1 (en) | Programming supporting method and programming support device | |
| US20050172276A1 (en) | XML-based preprocessor | |
| KR20090011974A (ko) | 컴파일 대상 파일 추출 방법 | |
| US5581769A (en) | Multipurpose program object linkage protocol for upward compatibility among different compilers | |
| JP3300090B2 (ja) | 試験プログラム実行方法 | |
| US6976249B1 (en) | Method for embedding object codes in source codes | |
| EP0731409A1 (en) | Method and apparatus for computer code processing in a code translator | |
| JPH10312312A (ja) | 仕様によって動作が変わるc言語の計算機プログラム検査処理方法およびプログラム記憶媒体 | |
| JPH10312313A (ja) | C言語の計算機プログラム検査処理方法およびプログラム記憶媒体 | |
| CN118113291B (zh) | 一种内存安全管理方法及设备 | |
| JPH10307735A (ja) | C++言語の計算機プログラム検査処理方法およびプログラム記憶媒体 | |
| JP3327662B2 (ja) | プログラム翻訳装置及びプログラム翻訳方法 | |
| JP2621555B2 (ja) | ベクトル化処理方式 |