C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[28885] Re:시드니 10.4.2 도무지 이해안되는 컴파일 에러
아루스 [tinydew4] 2597 읽음    2021-03-04 11:46
Delphi의 Format은 string, array of const 를 인자로 받습니다.
그래서 변수들을 [] 로 감싸서 array 표현을 한거죠.

C++ 에서는 string, TVarRec*, int 의 3개의 인자를 받게 되어있는데,
TVarRec*, int 를 처리해주는 ARRAYOFCONST(( )) 매크로가 있습니다.

Caption = Format("%s", ARRAYOFCONST((wstr))); // ok
Caption = Format("%s - %d", ARRAYOFCONST((wstr, i))); // ok

항상 ARRAYOFCONST를 쓰면 불편해서인지 가변 인자의 Format이 System.SysUtils.hpp 에 있습니다.
어느 버전부터 있는지는 모르겠습니다만, 1번과 4번의 경우는 이 함수에서 처리가 되어서 에러가 나지 않았습니다.

가변 인자 함수로 처리되려면 is_TVarRec_compat 조건을 만족해야 하는데, wchar_t * 는 해당하지 않습니다.
그래서 매칭되는 함수를 찾지 못합니다.

System.SysUtils.hpp 를 열어서 is_TVarRect_compat 을 찾아보시면 가변 Format에 허용되는 타입을 찾아 볼 수 있습니다.
10.4.2 기준으로 void, char, int, unsigned, long, unsigned long, double(win64, ios, android 허용), long double, ShortString, UnicodeString, Currency, Variant, WideString, long long, unsigned long long 이 있습니다.

가변 Format 코드를 복사해서 Enable 조건을 제거해보면 아래의 코드도 잘 동작하긴하는데,
char*, wchar_t* 의 경우는 특정 조건(null-terminated)을 만족하지 않으면 안전하지 않아서 허용하지 않은건가 하고 추측을 해봅니다;

짜증 님이 쓰신 글 :
: 시드니 10.4.2 테스트중인데여
:
: procedure TForm2.Button1Click(Sender: TObject);
: var
:   wstr: PWideChar;
:   i: Integer;
: begin
:   wstr := 'wstr';
:   i := 888;
:   Caption := Format('%s', [wstr]); // 정상
:   Caption := Format('%d - %s', [i, wstr]);  // 정상
:   Caption := Format('%s - %d', [wstr, i]);  // 정상
: end;
:
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:   String str = "str";
:   int i = 888;
:   const wchar_t *wstr = L"wstr";
:   Caption = Format("%d", i); // 정상
:   Caption = Format("%s", wstr); // 컴파일 에러
:   Caption = Format("%s - %d", wstr, i); // 컴파일 에러
:   Caption = Format("%d - %s", i, wstr); // 정상
: }
:
: 델파이는 에러 없이 컴파일되는데
: 빌더로 하면 위와 같은 에러가 나거든여
:
: 첫번째와 네번째는 에러없이 컴파일되면서
: 두번째 세번째는 컴파일 에러가 나는데
: 도무지 이해가 안되네여
:
: 10.4.1로 해봐도 같은 증상입니다
:

+ -

관련 글 리스트
28883 시드니 10.4.2 도무지 이해안되는 컴파일 에러 짜증 2484 2021/03/03
28885     Re:시드니 10.4.2 도무지 이해안되는 컴파일 에러 아루스 2597 2021/03/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.