������ ����� ����������

2. ��������� ������ � GNU CC

������ GNU CC ��������������� ��� ������������� ���� �� ������ ���������� � ������ �������, ������� ������ ������������ � ������� �������. ��� ��������� ��� ������ ����������� � �������� ��������� (* ��.: ������� ������������::.).

������, ������� �������� ��������� � ����������� �������� ��-������� �� ��������� ������� �������. � ����������, �������, ���������������� PCC, ������������ ����� ����, �� ����� ���������� �� ����, ����������������� GNU CC, � ��������. �� ��� �� �������� �������� �����, ������ ��� ���� ������������ ����������� UNIX ���������� ��������� ��� �����������.

GNU CC ��� ���������� ��������� � ����������� ����� 1, 2, 4 ��� 8 ���� � ��� �� ����� ���������, ������� ������������ ��� ����������� �������� " int " ��� " double ".( GNU CC ������ ������������ ���������� ����� ����� ���� � ���������.) ��������� � ����������� ������ �������� ������������ ����� ������ �� �� ������, ����������� ���������� ������������� (������ � ��������). ������������ � �������� ��������� " STRUCT_VALUE " � " STRUCT_INCOMING_VALUE " �������� GNU CC, ���� �������� ���� �����.

��������, PCC �� ����������� ������� ����� ���������� ��������� � ����������� ������ �������, ������� ������ � ������� ����������� ������, � ����� ��������� ����� ����� ����� ��� ��������� �� ��������. ���������� ������������ ������ ����������� ������ �� ���� ������� ������ ����, ���� ���������. ���� ����� ���������, ��� ������������ GNU CC, � ��� ������ ������������ ��������.

�� ��������� ������� �������, ���� RISC ����� � 80386, ����������� ��������� ���������� ������� � �������� ������������ ������, ���� ���� ���������� ��������. �� ���� ������� GNU CC ������������ ��� ������������� �� ����������� ������������, ����� ������������ ���� �����. �� �� ����� ���� ��������� ��� �������� 1, 2, 4 ��� 8 ������.

GNU CC ���������� ����������� ���������� ������� ��� �������� ����������. �� ��������� ������� ������ ��������� ���������� ���������� � ���������; �� ������ ��� ���������� � �����. ����� ���� �� ������������ �������� ��� �������� ���������� �� ����� ������, � ���, ��������, ���� �� ������������ ���������. �� ����������� ���� �� ������ ��������������� � �����, ����������� �� ������������ ����������. ��� ��� ��� ��������� ����� ������������, ������ ���� �� ����������� ���� ���� GNU CC �� ������������ C ��� �������. �� ������ ��������� ����������� �������� ��������� �� ������������ �������, ��� ������ � ��� ����� ����� ������ GNU �������, ��� �� ������ ������������� ���������� ��� ������ GNU CC.

�� ��������� ������� (�������� Sparc), ��������� ���� ���������� ���������� "��������� �������". ��� ��������, ��� �������� ����������� � ������, � ����� �� ������������ � ������ ���������� ������������.

���� �� ����������� " longjmp ", ������������� �������������� ����������. ANSI C �������,��� �������������� ����������, ������� �� ��������� "volatile", ����� �������������� �������� ����� " longjmp ". � ��� - ���, ��� GNU CC ������� ������, ������ ��� ����� ������ ������������ ����������� ���������� ���������, � ���� �� ������������ GNU CC - ��, �� ��� ����� �������� ���������� � �������� ��� ������ ����������.

���� �� ������, ����� ���������� �� ���������� ����� "longjmp", � �� �� ������ ������ "volatile", ������ ��� ������ C ����������� �� ������������ ���, ������ ��������� ����� ����������. ���� ����� ���������� �����-���� ����������, ����� ������ ��� ����, ����� ��������� ��� � ������������ ���, �� ���������� �� ����� ������� � �������:

      {
        int careful;
        $careful;
        ...
      }
���, ������������� GNU CC, ����� �������� ��������� ������������ ������������. ����������� �� ��� ������������ ����������, ��� ������� �� ������� ������� ������. ��� �������� ��������� � ������� �� ��������� �������, � �������� � ��������� ������ �� ����� ������, �� ������� ��������� ��������� ����� ��������� � ������� "-msoft-float". ��������� ����������� ����� ���������� C, ���� "bcopy" ��� "memcpy", ����� ���������� �������������. ������� ��������� ������ ������� ������������ ��� ������ ������������ �����������.

��� ������������ ������������ ������ ���� ���������� � ���������� "libgcc.a", ������� GNU CC ������������� ���� ������ ���, ����� ������� ���������. �� �������, ������� ����� ������� ��������� � ������� ��� ������������� ���������� ��������� ��������� ����� "libgcc.a" ������ �� ���������, �� ������ �� ������ ������.

������ �������������� ������� ���������� � " libgcc1.c " ��� ������������� ���������������� ��������������� ��������� C. ��� ������ ���� ����� ������������� ������ ������������ C, ������� ������������ ��� �������������� ��������� C, ���� ���� ����� �������� �����������������. ������, " libgcc1.c " �� ����� ��������, ���� ��� �������������� GNU CC, ������ ��� ������ �������������� ������� �������������� � ��������� � ����!


������ ����� ����������