質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

1回答

7589閲覧

visual studio 2010と2013の違い

TAKAYASU

総合スコア146

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

1クリップ

投稿2016/08/31 00:52

いつもお世話になっております。

C言語で作ったプログラムをVisual Studio 2010と2013で起動し、挙動を比較したところ、同じ挙動にならなかったことに疑問を持ちましたので質問させていただきます。

###事象
Visual Studio 2010では下記コードを記述すると
「Error:型"void*"の値を使用して型"VideoState*"のエンティティを初期化することはできません。」
といったエラーが出ます。
Visual Studio 2013ではエラーは発生しませんでした。

C

1[FFMPEGAPIの構造体] 2[エラーは下にあるFFMPEGAPIの関数で発生] 3typedef struct VideoState { 4 SDL_Thread *read_tid; 5 SDL_Thread *video_tid; 6 SDL_Thread *audio_tid; 7 AVInputFormat *iformat; 8 int no_background; 9 int abort_request; 10 int force_refresh; 11 int paused; 12 int last_paused; 13 int queue_attachments_req; 14 int seek_req; 15 int seek_flags; 16 int64_t seek_pos; 17 int64_t seek_rel; 18 int read_pause_return; 19 AVFormatContext *ic[1024]; 20 int realtime; 21 22 Clock audclk; 23 Clock vidclk; 24 Clock extclk; 25 26 FrameQueue pictq; 27 FrameQueue subpq; 28 FrameQueue sampq; 29 30 Decoder auddec; 31 Decoder viddec; 32 Decoder subdec; 33 34 int audio_stream; 35 36 int av_sync_type; 37 38 double audio_clock; 39 int audio_clock_serial; 40 double audio_diff_cum; /* used for AV difference average computation */ 41 double audio_diff_avg_coef; 42 double audio_diff_threshold; 43 int audio_diff_avg_count; 44 AVStream *audio_st; 45 PacketQueue audioq; 46 int audio_hw_buf_size; 47 uint8_t silence_buf[SDL_AUDIO_MIN_BUFFER_SIZE]; 48 uint8_t *audio_buf; 49 uint8_t *audio_buf1; 50 unsigned int audio_buf_size; /* in bytes */ 51 unsigned int audio_buf1_size; 52 int audio_buf_index; /* in bytes */ 53 int audio_write_buf_size; 54 struct AudioParams audio_src; 55#if CONFIG_AVFILTER 56 struct AudioParams audio_filter_src; 57#endif 58 struct AudioParams audio_tgt; 59 struct SwrContext *swr_ctx; 60 int frame_drops_early; 61 int frame_drops_late; 62 63 enum ShowMode { 64 SHOW_MODE_NONE = -1, SHOW_MODE_VIDEO = 0, SHOW_MODE_WAVES, SHOW_MODE_RDFT, SHOW_MODE_NB 65 } show_mode; 66 int16_t sample_array[SAMPLE_ARRAY_SIZE]; 67 int sample_array_index; 68 int last_i_start; 69 RDFTContext *rdft; 70 int rdft_bits; 71 FFTSample *rdft_data; 72 int xpos; 73 double last_vis_time; 74 75 SDL_Thread *subtitle_tid; 76 int subtitle_stream; 77 AVStream *subtitle_st; 78 PacketQueue subtitleq; 79 80 double frame_timer; 81 double frame_last_returned_time; 82 double frame_last_filter_delay; 83 int video_stream; 84 AVStream *video_st; 85 PacketQueue videoq; 86 double max_frame_duration; // maximum duration of a frame - above this, we consider the jump a timestamp discontinuity 87#if !CONFIG_AVFILTER 88 struct SwsContext *img_convert_ctx; 89#endif 90 SDL_Rect last_display_rect; 91 92 char filename[1024]; 93 int width, height, xleft, ytop; 94 int step; 95 96#if CONFIG_AVFILTER 97 int vfilter_idx; 98 AVFilterContext *in_video_filter; // the first filter in the video chain 99 AVFilterContext *out_video_filter; // the last filter in the video chain 100 AVFilterContext *in_audio_filter; // the first filter in the audio chain 101 AVFilterContext *out_audio_filter; // the last filter in the audio chain 102 AVFilterGraph *agraph; // audio filter graph 103#endif 104 105 int last_video_stream, last_audio_stream, last_subtitle_stream; 106 107 SDL_cond *continue_read_thread; 108}VideoState;

C

1[FFMPEGAPIの関数] 2static int read_thread(void *arg) 3{ 4 //ここでエラー 5 VideoState *is = arg; 6 ...省略... 7return 0; 8}

###質問
Visual Studio2010と2013にはどんな違いがあるのか?

個人的な推測になりますが、コンパイラのバージョンが違えば設計自体も異なるといった話を
聞いたことがありますので、それの類なのではないかと考えています。
ですが、理由を明確にすることができなかったので御存知の方が居ましたら教えていただきたいです。
#もしかして調べ方が悪いのかな...?

よろしくお願い致します。m(_ _)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

回答にはなりませんが、VSのバージョンアップに伴う変更点の概要は、下記ページなどから参照できます。

Visual Studio 2013 における Visual C++ の新機能
Visual Studio 2012 における Visual C++ の新機能

Support For C++11/14/17 Features (Modern C++)

ただ、今回の件に直結しそうな変更点は見つけられませんね。

Pointer Conversions (C++)も見てみましたが、void*のキャスト関連でVSのバージョンの違いでの記述(制限事項等)は見つけれませんでした。


ちなみに

C++

1VideoState *is = arg;

の部分を

C++

1VideoState *is = (VideoState *)arg;

C++

1VideoState *is = NULL; 2is = arg;

としても、VS2010でのエラー内容はへんかしませんでしょうか?

投稿2016/08/31 04:27

KenjiToriumi

総合スコア344

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TAKAYASU

2016/08/31 04:33

回答ありがとうございます! 上記のコードを試しに記述してみました。 エラーは取り除かれ、コンパイルができる状態になりました。 この事から考えられることは Visual Studio2010では明示的なキャストが必要 Visual Studio2013では暗黙的にキャストを行ってくれる という違いを結論にしてよろしいでしょうか?
KenjiToriumi

2016/08/31 04:51

私の曖昧な記憶になるのですが、VSのバージョンが上がるごとにセキュリティー強化対策などにより、明示的なキャストをしていないとエラーになるように変更されていたような・・・ なので、最初に質問を見た時も Visual Studio2010 では大丈夫だったのが Visual Studio2013 ではエラーになった質問だと思って、間違った回答を途中まで書いてました。 なので、最新の Visual Studio2015 にしたら、また明示的なキャストが無いとエラーになるようになっている可能性もありえます。 ちなみに、2パターンの変更例を示しましたが、最初の明示的なキャストではなく、2番目の初期化子を止めるパターンの結果はどうだったのでしょう?
TAKAYASU

2016/08/31 06:34

セキュリティ強化対策目的で違いが生まれる場合もあるということを知ることができました。 ありがとうございます。 2番目のパターンもコンパイルが通るようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問