コンパイルワーニングに関する質問

下記、標記のワーニングがビルド時に発生しています。

C5961 (I) Use of a type with no linkage to declare a variable with linkage

C5161 (W) Unrecognized #pragma

ビルドを試みているプロジェクトは過去にリリースをおこなったものですが、その際はこのようなワーニングはございませんでした。

変化点としましては、開発環境をセットアップしたパソコンが変更になった為、再度インストールしなおしております。

経験のございます方、回避方法等ご教示いただけないでしょうか。

Parents Reply Children
  • わわいさん
    ご返信ありがとうございます。

    C5961 (I) Use of a type with no linkage to declare a variable with linkage

    下記記述の} u0mr_addr, u1mr_addr, u2mr_addr;行に関連してメッセージが出ております。
    この記述はルネサスより公開されている、『sfr_r82d.h』に記事述されているコードと成ります。

    union{
    struct{
    char smd0:1; /* Serial I/O mode select bit */
    char smd1:1; /* Serial I/O mode select bit */
    char smd2:1; /* Serial I/O mode select bit */
    char ckdir:1; /* Internal/external clock select bit */
    char stps:1; /* Stop bit length select bit */
    char pry:1; /* Odd/even parity select bit */
    char prye:1; /* Parity enable bit */
    char b7:1;
    } bit;
    char byte;
    } u0mr_addr, u1mr_addr, u2mr_addr;
  • わわいです
    >#pragma pack
    というのは、変数のアライメントサイズをデフォルトにする、というものですが、すでにデフォルト状態のときにこれを指定したため、
    >C5161 (W) Unrecognized #pragma
    のワーニングが出ているのでしょう。
    これを出さないようにするには、該当の行を削除することですね

    >C5961 (I) Use of a type with no linkage to declare a variable with linkage
    こっちの方はちとそんだけではちょとわかりませんねー

    まあ、あくまでもワーニングですんで、気にしないで放置しておくってのもテだとも思いますが
  • ありがとうございました。
  • > #pragma pack

    M16Cシリーズ,R8Cファミリ用C/C++コンパイラパッケージ V. 6 . 0 0 のコンパイラでは以上の pragma はサポートされない指示であり、かつ、コンパイラに `-WUP' オプションが指定されていないと

    > C5161 (W) Unrecognized #pragma

    の警告は出力されないため、

    > ビルドを試みているプロジェクトは過去にリリースをおこなったものですが、その際はこのようなワーニングはございませんでした。

    という話は疑わしいです。
  • ご対応ありがとうございます。
    以前から出ていたのではと言う事になりますでしょうか。
  • ・以前から出ていた
    ・プロジェクトの設定を変更した

    どちらの可能性も考えられます。

  • YYさん、こんにちは。NoMaYと申します。

    ルネサスさんの製品ページに以下の2種類のHEW同梱コンパイラパッケージが残っていることから気になったのですが、ここでコンパイラの挙動が大幅に変更された可能性があるのではないかという気もします。(それ故、旧バージョンと新バージョンの2種類を残さざるを得なくなったのではないだろうか、という気がするのです。) インストールし直したコンパイラのバージョンと以前に使用されていたコンパイラのバージョンが同じかどうか確認されてみてはどうでしょうか? (それで、すみません、コンパイラのドキュメントを見て、今回の違いがありそうだ、というところまで確認した訳ではないです。その可能性があるかも知れない、と気になりましたので、、、というところです、、、)

    R8C, M16Cファミリ用C/C++コンパイラパッケージ ダウンロードページ
    www.renesas.com/.../compiler-package-for-r8c-and-m16c-families.html#downloads
    【無償評価版】M16Cシリーズ, R8Cファミリ用C/C++コンパイラパッケージ M3T-NC30WA V.6.00 Release 00
    【無償評価版】M16Cシリーズ, R8Cファミリ用Cコンパイラパッケージ M3T-NC30WA V.5.45 Release 01

  • V.5.45 で `-WUP' を指定して #pragma pack を含むソースをコンパイルすると

    C:\hoge\hoge.c(1) : [Warning(ccom)] unknown pragma PACK used
    

    という書式で警告が出ます。

    V.6.00 では

    C:\piyo\piyo.c(1) :  C1546 (W) unknown pragma PACK used
    

    なので僅かに書式は異なります。

    V.5.45 以前のものではどうなるかは不明です。

  • #pragma pack
    

    は GCC では有効なプラグマ指令です。

    また、ちょっとぐぐると HEW は R8C 等で使用できる GCC の実装である GNU M16C と組み合わせて使うことができたようです。

    なので、その組み合わせで開発されたソフトであるとか、開発初期に GNU M16C を使用していた可能性は考えられます。

  • fujitaさん、こんにちは。NoMaYです。どうもフォロー有難う御座います。

    すみません、気になったのですが、V.6.00にしても、YYさんの投稿にあった警告メッセージとは違うのですね。(そもそも番号が違っていますね。)

    YYさんの投稿:
    C5161 (W) Unrecognized #pragma

    V.6.00:
    C1546 (W) unknown pragma PACK used

    何か気になります、、、

    [追記]

    YYさんは#pragma packと仰ったのですが、実は、その付近に別の#pragma ○○○ □□□のような記述があって、例えば、○○○は正しいけれども□□□が間違っている、ということで C5161 の警告が出ていたりしないだろうか、という気もして来たのですが、、、