자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
빌더 2007로 작성되어 있는것을, XE10으로 변환하고 있습니다.
Target Platforms를 32bit로 컴파일시 정상 구동 됐습니다.
하지만, Target Platforms를 64bit로 컴파일시 다음과 같은 에러가 발생합니다.
Error 메세지 ===> ISO C++17 does not allow 'register' storage class specifier
혹시, 이같은 에러를 어떻게 해결해야 하는지 도움 부탁드리겠습니다.
감사합니다.
//----------------------에러 파일 소스 부분 --------------------------------
uInt a; // counter for codes of length k
uInt c[BMAX+1]; // bit length count table
uInt f; // i repeats in table every f entries
int g; // maximum code length
int h; // table level
register uInt i; // counter, current code
register uInt j; // counter
register int k; // number of bits in current code
int l; // bits per table (returned in m)
uInt mask; // (1 << w) - 1, to avoid cc -O bug on HP
register uInt *p; // pointer into c[], b[], or v[]
inflate_huft *q; // points to current table
struct inflate_huft_s r; // table entry for structure assignment
inflate_huft *u[BMAX]; // table stack
register int w; // bits before this table == (l * h)
uInt x[BMAX+1]; // bit offsets, then code stack
uInt *xp; // pointer into x
int y; // number of dummy codes added
uInt z; // number of
//---------------------- 소스 부분 --------------------------------
댓글 2
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
빌더 2007로 작성되어 있는것을, XE10으로 변환하고 있습니다.
Target Platforms를 32bit로 컴파일시 정상 구동 됐습니다.
하지만, Target Platforms를 64bit로 컴파일시 다음과 같은 에러가 발생합니다.
Error 메세지 ===> ISO C++17 does not allow 'register' storage class specifier
혹시, 이같은 에러를 어떻게 해결해야 하는지 도움 부탁드리겠습니다.
감사합니다.
//----------------------에러 파일 소스 부분 --------------------------------
uInt a; // counter for codes of length k
uInt c[BMAX+1]; // bit length count table
uInt f; // i repeats in table every f entries
int g; // maximum code length
int h; // table level
register uInt i; // counter, current code
register uInt j; // counter
register int k; // number of bits in current code
int l; // bits per table (returned in m)
uInt mask; // (1 << w) - 1, to avoid cc -O bug on HP
register uInt *p; // pointer into c[], b[], or v[]
inflate_huft *q; // points to current table
struct inflate_huft_s r; // table entry for structure assignment
inflate_huft *u[BMAX]; // table stack
register int w; // bits before this table == (l * h)
uInt x[BMAX+1]; // bit offsets, then code stack
uInt *xp; // pointer into x
int y; // number of dummy codes added
uInt z; // number of
//---------------------- 소스 부분 --------------------------------
C++ 빌더는 두종류의 컴파일러를 제공합니다.
1) 클래식 볼랜드 컴파일러
2) LLVM 기반 clang 컴파일러
기존 프로젝트를 C++빌더 10으로 열고, 32비트로 컴파일 시 "클래식 볼랜드 컴파일러"를 통해 컴파일 됩니다.
clang 컴파일러를 이용하면 C++17 등의 최신 문법을 사용할 수 있습니다.
하지만, 위의 오류(ISO C++17 does not allow 'register' storage class specifier)와 같이 변경 또는 중단된 문법도 있을 수 있습니다.
register 키워드도 C++17에서 중단된 문법인것으로 보입니다.
컴파일러를 선택은 프로젝트 옵션에서 설정할 수 있습니다.
Project > Options : Building > C++ Compiler : Use 'classic; Borland compiler = [true / false]
하지만, 64비트의 경우 LLVM 기반 clang 컴파일러만 지원합니다.
즉 register 키워드를 사용할 수 없습니다.
64비트 즉 clang 컴파일러로 컴파일하기 위해서는 register 키워드를 제거 후 컴파일 해보시기 바랍니다.
기타 다른 좋은 해결방안은 검색 등을 통해 확인해주셨으면 좋겠습니다.
(제가 C++에 능숙하지 못해 기본적인 답변만 드립니다.)
——————
답글이 도움이 되셨는지 다른 분들도 참고할 수 있도록 결과 댓글 부탁드립니다.
(결과 댓글이 없는 경우 다른 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)