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

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

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

C5161 (W) Unrecognized #pragma

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

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

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

Parents
  • わわいです
    そのワーニングの該当行はどういう記述になってるんでしょうか?
    それがわからないと答えようがないです
  • #pragma pack
    このように記載しています。
  • ご対応ありがとうございます。
    以前から出ていたのではと言う事になりますでしょうか。
  • ・以前から出ていた
    ・プロジェクトの設定を変更した

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

  • 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 の警告が出ていたりしないだろうか、という気もして来たのですが、、、

  • YYさん、こんにちは。NoMaYです。

    パソコンの中を漁っていたら、大昔にKPIT GNUM16CでR8Cを味見しようとしたのであろうと思われるプロジェクトが出てきたのですが、その.hwpファイルを見ると以下のような情報が入っていました。ここを見れば、当時どのコンパイラを使っていたのか(ルネサスコンパイラ or KPIT GNUコンパイラ、とか、そのバージョン、とか)分かりそうです。

    [HIMDBVersion]
    2.0
    [DATABASE_VERSION]
    "2.8"
    [PROJECT_DETAILS]
    "R8C" "C:\Work\R8C\R8C" "C:\Work\R8C\R8C\R8C.hwp" "M16C" "KPIT GNUM16CM32C [ELF]" "C Application" "R8C/Tiny" "R8C/29"
    [INFORMATION]
    "プロジェクト情報がありません"
    [TOOL_CHAIN]
    "KPIT GNUM16C [ELF] Toolchain" "v11.01"
    。。。以下省略。。。


    ちなみに、C:\Work\R8Cというフォルダは無く、ディスクの別の場所にバックアップがあった、という次第です。

  • 皆様、いろいろとありがとうございます。

    .hwpファイルを確認しました。
    [TOOL_CHAIN]
    "Renesas M16C Standard Toolchain" "6.00.00"
    上記のように記載があり、当時と現在は、同じコンパイラである事が確認できました。
    当時から、発生していた事が濃厚と成ってまいりました。

    ご存知であれば、以下2点ご教示ください。
     1、デフォルトの構造体パッキングの確認方法をご教示ください
     2、#pragma pack 1の状態で使用したと考えておりますが、ワーニングを出さずに設定する方法をご教示ください

    よろしくお願いいたします。
  • わわいです
    > 1、デフォルトの構造体パッキングの確認方法をご教示ください
    お使いのコンパイラ(ツールチェイン)のマニュアルに書いてあります
    > 2、#pragma pack 1の状態で使用したと考えておりますが、ワーニングを出さずに設定する方法をご教示ください
    (I)のメッセージはインフォメーションメッセージですんで、これが出なくなるように、と言うのはあきらめたほうがよろしいかと思われます。
    (W)のワーニングに関しては、でなくする方法はメッセージごとに変わってきますんで、ここで聞いていただければ教えますです
  • > 1、デフォルトの構造体パッキングの確認方法をご教示ください
    > 2、#pragma pack 1の状態で使用したと考えておりますが、ワーニングを出さずに設定する方法をご教示ください

    『M16Cシリーズ,R8Cファミリ用 C/C++コンパイラパッケージ V.6.00 C/C++コンパイラユーザーズマニュアル』の 156頁に「本コンパイラでは、デフォルトで構造体をパックします(以下略)」とある通り、構造体のパッキングをしたいのであれば指定は不要で構造体メンバの隙間にパディングを設けて構造体メンバのアライメントを揃えたい場合のみ `#pragma STRUCT~' の指定を行うようです。詳しくはマニュアルを参照してください。C:/Program Files (x86)/~ に HEW をインストールしていれば、マニュアルは C:/Program Files (x86)/Renesas/Hew/Tools/Renesas/nc30wa/v600r00/manual/~ にあると思います。

Reply
  • > 1、デフォルトの構造体パッキングの確認方法をご教示ください
    > 2、#pragma pack 1の状態で使用したと考えておりますが、ワーニングを出さずに設定する方法をご教示ください

    『M16Cシリーズ,R8Cファミリ用 C/C++コンパイラパッケージ V.6.00 C/C++コンパイラユーザーズマニュアル』の 156頁に「本コンパイラでは、デフォルトで構造体をパックします(以下略)」とある通り、構造体のパッキングをしたいのであれば指定は不要で構造体メンバの隙間にパディングを設けて構造体メンバのアライメントを揃えたい場合のみ `#pragma STRUCT~' の指定を行うようです。詳しくはマニュアルを参照してください。C:/Program Files (x86)/~ に HEW をインストールしていれば、マニュアルは C:/Program Files (x86)/Renesas/Hew/Tools/Renesas/nc30wa/v600r00/manual/~ にあると思います。

Children
No Data