2014-12-30 2 views
-4

일을하고전 가공 한 코드는 아래의 코드가 있습니다

unit Unit1; 
    {$DEFINE _Full} 
// {$DEFINE _Trial} 

interface 

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms; 


{$ifdef _Trial} 

_programname='abc'; 


{$endif} 

{$ifdef _Full} 

_programname='abc'; 


{$endif} 

전에 잘 작동하지만 오늘은 델파이를 실행하고 컴파일을 시도하지 않습니다, 그것은

{$DEFINE _Full} 
과 같은

Identifier redeclared: '_programname' 

을보고

이 작동하지 않습니다.

귀하의 의견 환영

+0

프로젝트 빌드 구성에'_Trial'이 정의되어 있지 않습니까? 어쨌든'{$ ELSE}'를 쓰지 않으시겠습니까? – TLama

+0

_Trial이 정의되지 않았고 _Full이 정의되었습니다 – arachide

+0

왜 많은 버전 태그를 사용 했습니까? 그게 무슨 뜻이야? –

답변

4

두 조건이 모두 정의됩니다. 이는 컴파일러 오류에서 추론 할 수 있습니다.

단일 행 // 주석은 주석으로 정의하지 않습니다. 또는 프로젝트 레벨에서 _Trial을 정의하고 있습니다. 가장 잘 알고있는 한 줄의 // 줄은 지시어를 주석으로 처리합니다. 그래서 나는 프로젝트 레벨에서 _Trial이 정의되어 있다고 생각합니다. 어느 쪽의 경우

{.$DEFINE _Trial} 

하거나 하나의 조건으로 간단 수 있습니다 상태 : :

정의를 주석하는 관용적 인 방법은 다음과 같이이다

아마도 실제 말했다
{$IFDEF _Trial} 
    .... stuff for trial version 
{$ELSE} 
    .... stuff for full version 
{$END} 

모든 표시되는 코드가보고 한 오류 메시지와 일치하지 않기 때문에 문제가 다릅니다. 키워드가 필요하지만 식별자 _programname이 발견되었다는 오류가 발생할 것으로 예상됩니다. 질문의 코드는 _programname 선언 전에 const 키워드를 생략 한 것으로 보입니다.

0

저는 _programname이 상수라고 가정합니다.이 코드는 t 코드와 가장 일치하기 때문에 표시하고 있습니다. 상수 선언은 CONST 섹션 블록에서 선언해야합니다. 이것을 시도하십시오 :

unit Unit1; 
    {$DEFINE _Full} 
// {$DEFINE _Trial} 

interface 

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms; 

CONST //<< Changed Code 

{$ifdef _Trial} 

_programname='abc'; 

{$endif} 

{$ifdef _Full} 

_programname='abc'; 


{$endif} 
+0

누락 된'const' 키워드가 문제라면, * E2029 선언이 예상되지만 식별자 '_programname'이 발견되면 컴파일이 실패합니다 * 오류. – TLama

+0

나는 'const'라는 코드를 가지고있다. 문제가되지 않는다. 내 코드는 모두 delphi7이다. 이전에 작동했지만, 다시 컴파일하면 오류가 발생했다. – arachide

+0

나는 이것을 XE2로 컴파일했다. 코드를 게시 했으므로 TLama의 의견에 따라 컴파일되지 않습니다. CONST 블록에 포함시킨 후에는 잘 컴파일됩니다. 내가 게시 한 오류를 재현 할 수 있었던 유일한 방법은 var _programname : string을 선언하는 것이 었습니다. 이것은 프로젝트의 어딘가에 _programname에 대한 또 다른 선언이 있음을 의미합니다. 별도의 단위로 선언 된 _programname 변수로 테스트 델파이 7 프로그램을 컴파일했지만 오류가 발생하지 않았지만 동일한 조건에서 XE2를 사용했습니다. –