3
#include <stdio.h>
#include <string.h>

typedef struct STest
{
  unsigned int uiRoll;
  unsigned short usiVal;
} TTest;

int main()
{
  TTest oTest = {0};  /* Initialize the Values with 0 */
  printf( "The values are: %d, %d\n", oTest.uiRoll, oTest.usiVal );
  return 0;
}

観察:

  1. でコンパイルgcc -Wextra -o a aa.cpp
  2. 警告を受ける:warning: missing initializer for member STest::usiVal
  3. memset 関数も試しましたが、それでも同じ警告が表示されます。
  4. 最初の構造要素に対する警告メッセージはありません。

構造を初期化するにはどうすればよいですか? 警告メッセージが表示されないようにします。

4

4 に答える 4

1

両方のメンバーを初期化しませんか?

TTest oTest = {0, 0};

または、おそらくより良い:

TTest oTest = { .uiRoll = 0, .usiVal = 0};  

(これは、実際に C コードを作成していることを前提としています。このコードは、拡張子 .xml でコンパイルgccおよび保存する必要があり .cます。そのコードを.cpp拡張子付きのファイルに保存すると、gccは C++ モードに切り替わり、その 2 番目のバージョンで失敗します。)

別のオプション: コンパイラを GCC >= 4.7.2 にアップグレードします (通常の 4.7.0 で十分でしょう)。その警告は削除され、コードにある短い形式を使用できます。

于 2013-05-01T12:44:24.257 に答える