Renesas Synergy™

FAQ 3000168 : 標準・数学ライブラリのmemcpy関数(CC-RL)

Q: 質問

統合開発環境のCS+で、
[標準・数学ライブラリを使用する]の設定を[いいえ]、
[ランタイム・ライブラリを使用する]の設定を[いいえ]としていても、
「構造体 = 構造体」の記述をして、
”memcpy”をユーザー関数名として関数本体を用意すると、
エラーではなく、memcpy関数が呼び出されるのはなぜでしょうか?


A: 回答

「構造体 = 構造体」の記述がある場合、コンパイラはmemcpy関数を呼び出すコードを生成します。

[ランタイム・ライブラリを使用する]の設定が[いいえ]の場合、
ランタイム・ライブラリは使用されず、ユーザ側で関数を定義していればユーザ関数が呼ばれます。
ユーザーズマニュアルに記載の注意事項は、ユーザがランタイム・ライブラリを 使用することを前提としています。

memcpyは標準ライブラリではなくランライム・ライブラリに含まれますが、標準ライブラリを使用しないからとユーザが自作のmemcpyを用意すると、ランタイム・ライブラリ呼び出しコードでユーザ自作のmemcpyを処理し動作不正になる危険性があるため、注意事項として記載しています。

memcpyやmemsetがランタイムライブラリ関数かユーザ関数かを判断する手段がないため、エラーや警告を出力することはできません。

 

適用製品

CS+ (旧 CubeSuite+)
RL78ファミリ用Cコンパイラパッケージ
他にご質問がございましたら、リクエストを送信してください