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

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

新規登録して質問してみよう
ただいま回答率
85.35%
コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2441閲覧

エラー[ varargs 中に __va_start intrinsic を許しました。 ]の解決方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/06/21 11:21

編集2021/06/22 07:33

以下のコードですが va_start();のコードで[ varargs 中に __va_start intrinsic を許しました。 ] というエラーが発生します。参考サイトを見てva_listのコピーを作成してva_copyを使ってコピーしてみましたが同じエラーが発生します。エラーの意味はどういった意味なのでしょうか?

参考サイト: https://www.jpcert.or.jp/sc-rules/c-msc39-c.html

cpp

1// ##################################### フォーマット書式描画 ##################################### 2void FrameWork::Text::DrawFormatString(glm::vec2 pos, glm::vec4 color, const char* str) 3{ 4 5 std::vector<Character> textData(0); //文字データを格納 6 7 if (str != NULL) 8 { 9/////////////////////////////////////////////////////////////////////////////////////////////// 10 //マルチバイト文字をワイド文字変換 11 wchar_t txt[1000] = { L'\0' }; 12 char text[1000] = {'\0'}; 13 14 va_list args = NULL; 15 va_start(args, str); 16 vsprintf_s(text, sizeof(text), str, args); 17 va_end(args); 18////////////////////////////////////////////////////////////////////////////////////////////// 19 int i, j, f; 20 for (i = 0, j = 0; text[j]; i++, j += f) 21 { 22 f = (int)mbrtowc(txt + i, &text[j], (size_t)MB_CUR_MAX, nullptr); 23 } 24 25 //文字をロード 26 for (int i = 0; txt[i] != L'\0'; i++) 27 { 28 //グリフをロード 29 FT_Load_Glyph(face, FT_Get_Char_Index(face, txt[i]), FT_LOAD_RENDER); 30 31 Character ch = 32 { 33 0, 34 glm::ivec2(face->glyph->bitmap.width, face->glyph->bitmap.rows), 35 glm::ivec2(face->glyph->bitmap_left, face->glyph->bitmap_top), 36 (unsigned int)face->glyph->advance.x 37 }; 38 39 glGenTextures(1, &ch.textureID); 40 glBindTexture(GL_TEXTURE_2D, ch.textureID); 41 glActiveTexture(GL_TEXTURE0); 42 43 glTexImage2D 44 ( 45 GL_TEXTURE_2D, 46 0, 47 GL_RED, 48 face->glyph->bitmap.width, 49 face->glyph->bitmap.rows, 50 0, 51 GL_RED, 52 GL_UNSIGNED_BYTE, 53 face->glyph->bitmap.buffer 54 ); 55 56 //テクスチャタイプを設定 57 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 58 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 59 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 60 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 61 62 63 //テクスチャを生成 64 textData.push_back(ch); 65 66 } 67 68 69 70 shader->setEnable(); //シェーダーを有効にする 71 glBindVertexArray(vao); 72 glBindBuffer(GL_ARRAY_BUFFER, vbo); 73 74 //色をRGBにして位置を反転 75 pos.y = FrameWork::getWindowContext()->getSize().y - pos.y - charSize; 76 float c = 1.0f / 255.0f; 77 78 //Unform 79 shader->setUniform4f("uTextColor", color * c); 80 shader->setUniformMatrix4fv("uViewProjection", glm::ortho(0.0f, FrameWork::getWindowContext()->getSize().x, 0.0f, FrameWork::getWindowContext()->getSize().y)); 81 82 for (std::vector<Character>::iterator itr = textData.begin(); itr != textData.end(); itr++) 83 { 84#define SCALE 1.0f //文字の大きさ 85 86 float xpos = pos.x + itr->Bearing.x * SCALE; 87 float ypos = pos.y - (itr->Size.y - itr->Bearing.y) * SCALE; 88 89 float w = itr->Size.x * SCALE; 90 float h = itr->Size.y * SCALE; 91 92 float vertices[6][4] = 93 { 94 { xpos, ypos + h, 0.0f, 0.0f }, 95 { xpos, ypos, 0.0f, 1.0f }, 96 { xpos + w, ypos, 1.0f, 1.0f }, 97 98 { xpos, ypos + h, 0.0f, 0.0f }, 99 { xpos + w, ypos, 1.0f, 1.0f }, 100 { xpos + w, ypos + h, 1.0f, 0.0f } 101 }; 102 103 glBindTexture(GL_TEXTURE_2D, itr->textureID); 104 glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices); 105 glDrawArrays(GL_TRIANGLES, 0, 6); 106 glBindTexture(GL_TEXTURE_2D, 0); 107 108 pos.x += ((itr->Advance >> 6) * SCALE); //次のグリフに進める 109#undef SCALE 110 } 111 112 glBindVertexArray(0); 113 glBindBuffer(GL_ARRAY_BUFFER, 0); 114 shader->setDisable(); //シェーダーを無効にする 115 } 116 117 118 glBindBuffer(GL_ARRAY_BUFFER, 0); 119 glBindVertexArray(0); 120} 121 122 123

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

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

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

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

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

int32_t

2021/06/21 15:45

この関数の完全なコードを開示してください。何をしたいコードなのかも。 (できれば問題を再現できる最小のコードが望ましいです)
FKD

2021/06/22 07:18 編集

C2704が出ているという事は、可変引数がない関数でva_startを使っていると思います。(x64構築) 最低でも関数定義を開示してください。
退会済みユーザー

退会済みユーザー

2021/06/22 07:33

提示子コードを修正しました。
guest

回答2

0

ベストアンサー

可変長引数が存在しないのにva_startを使っているので、コンパイルエラーになっています。
...が可変長引数です

C++

1//元の定義 2void FrameWork::Text::DrawFormatString(glm::vec2 pos, glm::vec4 color, const char* str) 3 4//可変引数追加 5void FrameWork::Text::DrawFormatString(glm::vec2 pos, glm::vec4 color, const char* str, ...)

投稿2021/06/22 08:20

FKD

総合スコア268

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

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

0

質問のコードが不完全なので、適当に補って試してみましたが、
[ varargs 中に __va_start intrinsic を許しました。 ]
というエラーは発生しません。

C

1#include <stdio.h> 2#include <stdarg.h> 3 4void func(const char *str, ...) 5{ 6 //マルチバイト文字をワイド文字変換 7 wchar_t txt[1000] = { L'\0' }; 8 char text[1000]; 9 10 va_list args = NULL; 11 va_list args2 = NULL; 12 13 va_start(args2, str); 14 va_copy(args, args2); 15 16 vsprintf_s(text, sizeof(text), str, args); 17 va_end(args); 18 printf("[%s]\n", text); 19} 20 21int main(void) 22{ 23 func("%d %s", 123, "abcdefg"); 24}

実行結果

text

1[123 abcdefg]

エラーの発生する完全なコードを質問に追記してください。

投稿2021/06/21 19:00

kazuma-s

総合スコア8224

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問