|
|
��� ������� �������� ��: English Castellano ChineseGB Deutsch Francais Italiano Portugues Russian Turkce Arabic |
����� Lorne Bailey <sherm_pbody(at)yahoo.com> �� ������: ���� ����� � ������ � �������� ������������� �� �����������, ��������������� �� �����-������ ��� ��� ������ Oracle. ������ �����-�� ����� - ��������������� ������������� � ����� *nix - ���� ��������� ������� '��� DLL'. ������ �� �������� ��� ����� ������ �������� �� �����������. ������� �� �������: ������� ������� <forlelik(at)yahoo.com> ����������:
|
������:
��� ������ ������������, ��� �� ������� � �������� ����� ��, � ����� ����������� ��� � �������������� gcc � �������� �����������. �� ����� ���� ����������, ��� �� ������� ������� ���������� �� ��������� ������ ��� �������� ���� �� ��. ����� �� ������� ������� ����� ����, ��� �� �� ����� ���� ����������, � ����, ��� �� ������ �������������� ���������� ����� ��������. ����� �� ����� ������ ���������� ������������� ���������.
������ �� �� ����������� ���������� ���������� ������������ �����������
������������ � ��������� ������, ����������� � ����-���� �������������?
������ �� ������ �����, ��� ���������� � ����� ����������� �����? ����� �����
�������������� ������ ���� ��� ������ ������. Ken Thompson, ��� ����� ��
���������� ������� ���� ������, ������� ����������, ������� �������� ������
��� � ��������� 'login' � ���������� ������, ����� ����������, ����������� ���,
������������ ��� ����. �������� �������� ���� ������ �������� �����: . � �������, � ��� ���� gcc.
��� ������ �� ���������� configure; make; make install
, gcc ��������� �� ������ ����� ������� ������. ��� ��� ��������� gcc
�������� �� ����? �� ������ ������ ��������� ����, �� ������� ���� �������,
������� ��� ����������� ��� ������������ ���������������� �����������.
��������� �� �������� � ������� �����, ��� ����������� ��������� ��������
���������� ��� ����, ����� �����, ��� ����� ������� ��� �������� ������������
����� � � ����� �������. �� ������� ����� ����� ����, ��� �������������
��������� �� ��, � ����� �����, ������� ���������� gcc ������ ��, ��� ���
�����. ������� (� ������������ �� ������������� ��������) �������������(Pre-compile) (gcc -E), ����������(Compile) (gcc), ���������������(Assembly) (as), and ����������(Link) (ld).
��-������,������, �� ������ �����, ��� ������� ���������� � ������ ���. ��� ������������� ������. �� ������ � ������ ������������ ������ ��������� �� ��. (������� ������ ���� ��������).
#include <stdio.h> int main()
{ printf("Hello World!\n"); }
��������� ���� ���� � ������ game.c
. �� ������ �������������� ���
�� ��������� ������, ��������:
gcc game.c�� ���������, ���������� �� ������� ����������� ���� � ���������
a.out
. �� ������ ��������� ���, ������:
a.out Hello World������, ����� �� ������������ ���������, �����
a.out
�����
�������� ���������� ���������. �� �� ������ �������, ����� �� ��������
������� ������� a.out
. �� ����� ������ ��� ��������, ������� gcc,
��� �� ����� ������� ����������� ����, � ������� ����� -o
. ��
����� ������� ��� ��������� game
, ���� �� ����� �� ������� ��
��� ������, ��������� �� �� ����� ����������� �� �����, ������� ���� Java.
gcc -o game game.c
game Hello World
� ���� ����� �� ��� ����� ������ �� ��������� �������� ���������. ���� �� �������, ��� ��� �����, �� ������ ������� �� �������� ����, ��� � ��� ���� ���������, ������� ������������� � ��������. ��� ������ �� ����-������ ������ ��������� ��������� ����������������, �� ������� ��������� � ���, ��� ��������� �������� ���������������. ��������, ��� ������ ���������� ����������� ����� �������� 1,000 ����� ��������� ����, � ����� ����� �� ���������. � �����, ��� ����� ����� �� ������. �� �������� ��������� ���������� ���������, �� ��������� �� � ����� ����������� �� ��������. ��� ��������� ���������� ������, ������� ��� ����� ����� ��������� �� ���� ���. ���� � ����, �� ����� ������, ��� �� ������� � ��� �� ��������, ��� ��� �� ������, �� ��� ���������������. ��� ������� ��� �� �������� ����-��, ���, �� ������ ������ ������ ��������, � �������� ���� �������������, �� ������� �� ������ ����������� ������. ������� - ��, ��� ��������� �������������, ����� �� ��������, ��� ��� �����.
��������� ��� - �������� ������������� ����� ��� ����� ����. ������������ ���� �������� � ����� ����� ���� ������ � �������� �������. ��� ������������ ������������� ����������� �������� ������, ��� ��� ������ ����� ����� ��������� ������������ ���-���� ���������.
#ifndef DECK_H #define DECK_H #define DECKSIZE 52 typedef struct deck_t { int card[DECKSIZE]; /* number of cards used */ int dealt; }deck_t; #endif /* DECK_H */
��������� ���� ���� ��� deck.h
. ��� ��� ������������� ������
����� .c
, �� ������ �������� ��� game.c. � ������ 2 ����� game.c,
�������� #include "deck.h"
. � ������ 5, �������� deck_t
deck;
����� ���������, ��� �� ������ �� �������, �������������
��� �����.
gcc -o game game.c
��� ������ - ��� �������. ���� �� �� �������������, ����������� � ���, ���� �� �� ����������.
������ ���������� �����, ������ ���� deck_t
? ������ ��� �� �����
�������������� �� ������������� �������� ���� "deck.h" � ���� "game.c".
��������� ������������� � �������� ���� ������������ ��������� "#". �� ������
������� ������������ ����� ���������� gcc � ������� ����� -E
.
gcc -E -o game_precompile.txt game.c wc -l game_precompile.txt 3199 game_precompile.txt����� 3,200 ����� ������! ����������� �� ��� ���������� �� ������������� �����
stdio.h
, �� ���� �� ����������
�� ���, �� ������� ����� � ���� ��������. ���� �� �� ������ ��� ���������
����� ����� ���� -o
, �� ����� ������� �� �������. �������������
���� ���� ������� ��������, �������� ��� ������� ����. -E
����� �� ����, � ������ ����� ���������� ��� ����� �
�����������.
� �������� �������������� ����, gcc ����������� ��� ��� � ���� ����������. ����� ������� ���, �� ������ �����������, ��� �� ����� � ����, �������� ��� ���. ���� �� ������� �������������� ������, �� ������� ��� �� ���� � ���������� ���������. ���� ������ �������� ������, ��� ��� ������������ ��� ����� ��������. ������ ��� gcc �������� ��� ����� ����� ������.
as
��������� ��� �� ���������� � ��������� ���. ��������� ���
�� ����� ������� �������� � ����������, �� �� ����� ������ � �����. �����
����������� -c
���������� ���� .c � ��������� ���� � �����������
.o. ���� �� ���������
gcc -c game.c, �� ������������� ������� ���� � ������ game.o.����� �� ����������� �� ������ �����. �� ����� ����� ����� ���� .c � ������� �� ���� ��������� ����. ��� �� ������ ����, �� ����� ������������� ��� ��������� ����� � ����������� ���� �� ����� ����������. ������� �������� � ������ �������. ��������� �� ������������� ��������� ���� � ���������� ������ ���� ���
deck_t
, ��� ����� ��������
�������, ������� ������ ������. ��� ������� �������� ��������� �� ��� ������
� ��������� ��� ���������� ���������� ��� ����. ��� ������ �� �������, �������
��� ��������������, � ������� ������� 'drawn'. ���� ������ �� DECKSIZE
��������� ������������ ���������� �������� �����.
#include <stdlib.h> #include <stdio.h> #include <time.h> #include "deck.h" static time_t seed = 0; void shuffle(deck_t *pdeck) { /* Keeps track of what numbers have been used */ int drawn[DECKSIZE] = {0}; int i; /* One time initialization of rand */ if(0 == seed) { seed = time(NULL); srand(seed); } for(i = 0; i < DECKSIZE; i++) { int value = -1; do { value = rand() % DECKSIZE; } while(drawn[value] != 0); /* mark value as used */ drawn[value] = 1; /* debug statement */ printf("%i\n", value); pdeck->card[i] = value; } pdeck->dealt = 0; return; }
��������� ���� ���� � ������ shuffle.c
.
�� ��������� ���������� ���� � ���� ���, ����� ��� ������� �� �������
������������ ������ ����. ��� �� ������� ����� ��������� ����������������, ��
������ �����, ����� �� ������, ��� ����������. ��������� �� ������
�������� ���� ����, � ��� ��� ������� ������� ���������, ��� ���� �������
������ ��, ��� �� �����. � ������� printf, �� ����� ����� �������, ���
���������� ����� ������, ��� ���, ����� �� �������� � ����� ��������� ����, ��
����� �����, ��� ������ ������ ������������. ����� ����, ��� �� ��������,
��� ��� �������� ���������, �� ������ ��� ������� �� ������ ����. ���
������� ������� �������� �������� ������, �� ��� ������ ��� � ��������� �����.
�� ������� ����� ������� ��������� �����.
shuffle.c
�� ��������
������� 'main' � ������� �� ����� ���� ��������������� ����������� ������. ��
������ ������������� ��� � ������ ����������, ������� �������� 'main' �
�������� ������� 'shuffle'. ��������� �������
gcc -c shuffle.c� ���������, ��� ��� ������� ����� ���� � ������
shuffle.o
. �������������� ���� game.c, � � ������ 7,
����� �������� ���������� deck_t deck
, �������� ������ shuffle(&deck);������, ���� �� ��������� ������� ����������� ���� �����, ��� � ������, �� ������� ��������� �� ������
gcc -o game game.c /tmp/ccmiHnJX.o: In function `main': /tmp/ccmiHnJX.o(.text+0xf): undefined reference to `shuffle' collect2: ld returned 1 exit status���������� ���� ��������, ��������� ��������� ��� ����������. ���� ���������� ���������� � �������, ��������� �� �� ������� �����������, ��� ��������� ������� 'shuffle'. ��� ����� link � ��� ��� ������� �����������, ��� ����� ��� �������?
�����������, ld
, ����� ��������� ���, ��������� �����
as
� ���������� ��� � ����������� ��������
gcc -o game game.o shuffle.o��� ������������ ��� ������� ������ � ������� ����������� ����
game
.
����������� ������� ������� shuffle
� ��������� ���� shuffle.o �
�������� �� � ����������� ����. ��������� �������� ��������� ������ � ���,
��� ���� ��� ����� ������������ ��� ������� �����, �� ���, ��� ���
����������� - ��� ���������� ���� "deck.h" � �������
��������� ���� shuffle.o
� ����� ����������� ������.
��������� ������������� ����, ��� ���� ������, ������������� ����. ����
�� �� ������ ������� printf
, ������� �� �������� ���� � ����������
�����������, ����������� ����� �� ����������� � �����, ������� �� �������� �
������� #include <stdlib.h>
� ������ � ��������� �����,
���������� � ���������� �� (/lib/libc.so.6). ���� ������ �� �����
������������ ��� ������, ���� ��������� ��� ������� �������� ��������� �
��������� � ������� ����� �������. ��� �������� ��������, ������
������������ ����� ������ �������� ������ ����������� ������ � �������, � ��
���� �������. ������ �� �������� ��������� ����� ��� ���������� ���
������������, ����� ��������� �� � ����������� ����. � ����� ����� �����
���������� ��������, ��������� �� �� ��������� ����������� ������� � ���
������������ ����. ��� �� ����� �������, ����� ���������, ��� ��� �������
������?
����� -Wall
���������� ��� ���� �������������� �������������� �����, ����� ������ ���
��������������, ��� ��� ��� ���������� � ����������� �����������. ����� ��
���������� ��� ����� � ����������� ��� ���, �� ����� ���-�� �����:
game.c:9: warning: implicit declaration of function `shuffle'��� �������� ���, ��� � ��� ���� ��� ������� ������. ��� ����� ��������� � ������������ ���� ������, � ������� �� ������� ����������� ��� � ����� �������
shuffle
, ����� �� ��� ��������� ���, ��� ��� �����. ��� ������,
��� �����������, �� ��������� ����������� �� ���������� � ��������� ���
������������ ���� ������� ����� ������� ���������� ������ ������������� �����
� �������������� ������ ���������� ����. �� ������ ��������� ���� ������ �
���� deck.h. void shuffle(deck_t *pdeck);��� ������� ��� �� ���������������� ���������.
��� ����� ����� ������ ����������� �������� ����������� -O#
(��������, -O2).
��� �������� �����������, ����� ������� ����������� ��� �����. � �����������
������ ����� "��������", ����� ������� ��� ��� ������������� ����-����
�������. ��� ��������� ��������, ��� ����, �� ������ �� �������� �������, ��
��� ������� �������� ����� �������� �������� ���������. �� ������� ��� �����
�����, ��� ��� �� ������ �����, ��� ��� ��������.
��� ��� ���� ��������, ��, ��� ��� ��� �������������, ����� �� ��������, ��� �� �������� ���, ��� �� ����� �����. �� ������ ���������, ��� ��� ����� ������������ ������ ���� ���, ��������
game | sort - n | less� ����������, ��� ������ �� �������. ��� ��� ����� �������, ���� ����� ��������� ��������? ��� �� ����� ���������� ��� ������ � ����� ������? �� ������ ��������� ��� ��� � ������� ���������. ����������� ������������� ���������� ������������ �������� - gdb. ���� ����� ��������� ������ ��������� ���, ��� � ����, KDE ���������� ����� ������� ���������� KDbg. ���������� � ������ ����������, � ��� ����� �������. ��� ������� �������, �� ��������� File->Executable, � ����� �������� ���� ���������
game
. ����� �� ��������� F5 ��� ��������� Execution->Run ��
����, �� ������ ������� ����� � ��������� ����. ��� ����������? �� ������ ��
����� � ����. �� ����������, KDbg �� ��������. �������� ������� � ���, ��� ��
�� ��������� � ����������� ���� ���������� ����������, ��� ��� KDbg
�� ����� ������� ���, ��� ���������� ������. ���� ����������� -g
�������� ����������� ���������� � ��������� �����. �� ������ �������������
��������� �����(���������� .o) � ���� ������, ��� ��� ������� ������ �����
gcc -g -c shuffle.c game.c gcc -g -o game game.o shuffle.o��� �������� � ����������� ���� �����, ������� ��������� gdb � KDbg ��������, ��� �� ����������. ������� �������� ������ �������, � ����� ������� ��������� ���� �����, ����� ��������� �������� � ����������. ��������, ������� �������� �������� ������������, �������� ����������� ��������� "����� ��������" 'Breakpoint' � �������� ����. ���������� ��������� �� ������ �������� ������ ������ �� ������ � ������� �������
shuffle
. �� ���� ������
������ ��������� ��������� ������� ������. ������, ����� �� ������� F5,
��������� ��������� ���������� �� ���� ������. ������� F8, ����� ����� �
������� shuffle. ���, ������ �� ������� �� ��� �� shuffle.c
! ��
����� �������������� ���������� ��� �� ����� � ������, ��� � ����������������
����������. ���� �� �������� ������� �� ��������� ����������, �� �������, ���
� ��� ��������. �������. ��� ������� �����, ��� ��������� � printf
,
�� ��� ��?
��� ������ ������������ ������ ��� �� ���������� � ������� �������� ��. ��
�������� ����, ������� ��������� ���������� � �����, ������� ��� �����
�������� ��� �� ����������. �� ��������� ���������� ����������� ��������� �
��������� ��������� � ���������. ��������� ����� �����, ����� �������������
������, ��� �� �������, �� � �������, ��� ��� ��������, ����� �� ������ � ���
����. �� ������ ����� ������ ���������� � ��������� man
�
info
��� gcc
, as
�
ld
.
��������������� ��������� ���� ������ ��� ����� �����. ��� ��������, �� ������ ����� ����� ������ ��������� ��������� ���� �� ���� ������ � �������� ���� "� ����". ��������� �����, ����� �������, ��� ������������ ����������. ������� ����� ������ � ��������� � ����������� �����������, ��� KDbg. ���� �� ����� �������� ������� ����������������, ��� ����� �������, ������ ��� �� ������� ���. �������, ��������� ������ ���������� ����������!
����� ��������� ��������� ����, ������� ����� ��� ������������ ��� �������� ������ ����.
|
Webpages maintained by the LinuxFocus Editor team
© Lorne Bailey, FDL LinuxFocus.org Click here to report a fault or send a comment to LinuxFocus |
Translation information:
|
2002-02-26, generated by lfparser version 2.19