singlepost

Делфи не компилит некоторы строчки << На главную или назад  

Доброй ночи всем. Такая проблема: уже не раз сталкивался с такой проблемой, что делфи не компилит некоторые строчки, причем совсем непонятно по какой причине, абсолютно рандомно. Раньше решал такую проблему созданием нового проекта и переписыванием его заново, но сейчас у меня большой код, так что такое решение не пойдет. кто знает,в чем причина?

З.Ы. Если такая тема уже поднималась, то прошу меня извинить и перенаправить туда. Всем заранее спасибо.

46 ответов в теме “Делфи не компилит некоторы строчки”

  1. 12
    Юран Кербицков ответил:

    хм..точно

  2. 11
    Владимир Муромский ответил:

    А я вам скажу почему. Там, где вторая строчка, помеченная плюсами, используется переменная TempDescriptor. Но после этого она нигде не используется. Соответственно нафиг она нам нужна? Вот оптимизатор ее и выкинул. И, кстати, правильно сделал. За первой строчкой не следил, думаю аналогично

  3. 10
    Александр Новиков ответил:

    рад, что оказался полезным х))

  4. 9
    Юран Кербицков ответил:

    яхууу)) заработало) все же оптимизация окакзалась, с директивой {$O-} компилится все. Спасибо за помощь!

  5. 8
    Олег Абраменко ответил:

    Я кстати, с таким тоже встречался, но решал проблему переписыванием участка кода и/или перестановкой операторов(при возможности), добавлением мусорного кода. Возможно это танцы с бубном… но все же

  6. 7
    Максим Рогожин ответил:

    Пытался прочитать код – паламал глаза…. А не пробовал форматировать код для удобочитаемости?.. Как в такой каше потом разбираццо?..

    на самом деле есть форматирование, только вот, когда размещал сюда, все табуляции вначале просто пропали

  7. 6
    Александр Новиков ответил:

    может всё же оптимизация?
    поставьте директиву {$O-} :)

  8. 5
    Юрий Грицуля ответил:

    Пытался прочитать код – паламал глаза…. А не пробовал форматировать код для удобочитаемости?.. Как в такой каше потом разбираццо?..

  9. 4
    Максим Рогожин ответил:

    не ставит синий кружок и при пошаговой отладке пропускает эти строки

  10. 3
    Владимир Муромский ответил:

    "но при переписывании заново в новом проекте все снова работало нормально, причем копипастом нельзя было код вставлять, надо было его писать заново."

    ну это прям чудеса какие-то…
    ЗЫ – а в каком смысле не компилит? Выделяет красным или компилит без них, не ставя напротив пропущенных строчек синий кружок?

  11. 2
    Максим Рогожин ответил:

    я не думаю, что они не несут смысловой нагрузки, поскольку они важны для алгоритма + бывало, что в простых программках, набодобие сортировок, не компилились важные строчки, но при переписывании заново в новом проекте все снова работало нормально, причем копипастом нельзя было код вставлять, надо было его писать заново. такое я наблюдал на разных машинах и версиях делфи, так что проблема где-то в ней.
    вот фрагмент кода, в котором я сейчас столкнулся с такой проблемой(плюсами помечены не компилируемые строчки):

    PContourElement = ^TElement;

    PDescriptor = ^TDescriptor;

    TElement = record
    Point: TPoint;
    Next, Previous: PContourElement;
    Flag: TEdgeFlag;
    Past: boolean;
    Dir: TDirection;
    InBound: boolean;
    SharedFriend: PContourElement;
    Region: 1..2;
    end;

    TDescriptor = record
    Angle: real;
    NextD, PreviousD: PDescriptor;
    CrossVertex: PListPoint;
    Index: integer;
    Status: TStatus;
    end;

    procedure TForm1.SetEdgeFlag(var P: PContourElement; C: TContour; Reg: TRegion);
    var
    i, j, k, m: integer;
    inM, havecrosses: boolean;
    TekPoint, tekP, MiddleP: PContourElement;
    TempDescriptor: PDescriptor;
    MiddlePoint: TPoint;
    begin
    havecrosses := false;
    for i := 0 to High(GCP) do
    if PointComparison(P^.Point, GCP[i]) or
    PointComparison(P^.Previous^.Point, GCP[i]) then begin
    HaveCrosses := true;
    Break;
    end;

    if HaveCrosses then begin
    for i := 0 to High(Reg) do begin
    TekPoint := Reg[i].Head;
    for j := 0 to Reg[i].Size do
    if PointComparison(P^.Point, TekPoint^.Point) and
    PointComparison(P^.Previous^.Point, TekPoint^.Previous^.Point) then begin
    P^.Flag := Shared1;
    P^.SharedFriend := TekPoint;
    Break;
    end
    else if PointComparison(P^.Point, TekPoint^.Previous^.Point) and
    PointComparison(P^.Previous^.Point, TekPoint^.Point) then begin
    P^.Flag := Shared2;
    P^.SharedFriend := TekPoint;
    Break;
    end;
    TekPoint := TekPoint^.Next; //+++++++++++++++++++
    end;
    if (P^.Flag <> Shared1) and (P^.Flag <> Shared2) then begin
    HaveCrosses := False;
    for i := 0 to High(ConnectionList) do begin
    TempDescriptor := ConnectionList[i].Head^.InDescriptor;
    for j := 0 to 2*ConnectionList[i].Size do
    if TempDescriptor^.CrossVertex^.Prev^.Region = Reg[0].Head^.Region then begin
    HaveCrosses := True;
    Break;
    end;
    if HaveCrosses then Break;
    TempDescriptor := TempDescriptor^.NextD;//++++++++++++++++
    end;
    if HaveCrosses then begin
    MiddlePoint.X := abs((P^.Point.X – P^.Previous^.Point.X) div 2);
    MiddlePoint.Y := abs((P^.Point.Y – P^.Previous^.Point.Y) div 2);

    for i := 0 to High(Reg) do
    if InContour(Reg[i], MiddlePoint) then begin
    P^.Flag := InsideEdge;
    Break;
    end
    else P^.Flag := OutSideEdge;
    end
    else
    if P <> C.Head then P^.Flag := P^.Previous^.Flag
    else
    for i := 0 to High(Reg) do
    if InContour(Reg[i], P^.Previous^.Point) then begin
    P^.Flag := InsideEdge;
    Break;
    end
    else P^.Flag := OutSideEdge;
    end;
    end
    else
    if P <> C.Head then P^.Flag := P^.Previous^.Flag
    else
    for i := 0 to High(Reg) do
    if InContour(Reg[i], P^.Previous^.Point) then begin
    P^.Flag := InsideEdge;
    Break;
    end
    else P^.Flag := OutSideEdge;
    end;

    если понадобится что-нибудь еще, то скину

  12. 1
    Владимир Муромский ответил:

    Рендомно ничего не бывает. А ты бы привел эти строчки-то, а точнее целые куски кода. Уверен, что эти строчки выкидываются из-за оптимизации, так как особой смысловой нагрузки не несут

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.