Ԥ������ (preprocessor)
�� LPC ������ (compiler) ����, Ԥ��������Դ�������ǰ��, ���ṩ���±���������:
- ����Ķ����Դ���� (#include)
- �� (macros) (#define, #undef)
- �������� (#if, #ifdef, #ifndef, #else, #elif, #endif)
- ���� (#echo)
- ʹ���ض��ı��������� (#pragma)
- ���ٵ����¸�ʽ (@, @@)
˵��:
- ǰ���� # ��ͷ������ (���� #include), �� # ���ű������ÿ�еĵ�һ����,
ǰ�治�����пհ�.
#include �ṩ�˹���.
- � 1 :���� #include <file.h>
- � 2 :���� #include "file.h"
- � 1�� ����ʽ, ����ϵͳ�ı����� (include) Ŀ¼��, Ѱ�� file.h.
(�� TMI ���� /include)
- � 2�� ����ʽ, ���ڳ����ļ����ڵ�ͬһ��Ŀ¼��, Ѱ�������õ� file.h
�궨�彫����Դ�����е�һЩ�ֻ��ɶ��������. Ŀ���������س����ڲ���ϸ�ڡ����ٴ��ֵ����������ڸ��ij��� (constant).
- � 1 : #define identifier token_sequence
- � 2 : #define identifier(id_list) token_sequence
- ������, Դ�����е� identifier ʹ�ô�дӢ����ĸ��ǿ�����������ֵ�λ��,
������Դ���뿪�˻��������õı�ͷ�� (header file)�� �ж���������.
- �ڶ������ id_list �г��� identifier �ܴ����� token_sequence.
- /*�� ���һ���� 40 ��Ԫ�ص���������, ��������Ԫ�ص�ֵ��ʼ��Ϊ���ŵ�����.
�� stack[0] = 0, stack[1] = 2, stack[2] = 4 ....�Դ�����. */
#define STACKSIZE 40
#define INITCELL(x) 2*x
int *stack;
create() {
- int i;
stack = allocate(STACKSIZE);
for (i = 0; i < STACKSIZE; i++)
- stack[i] = INITCELL(i);
- � : #undef identifier
- #undef �������һ�����������ڵ� identifier.
��������
��Щ������������ij�������п����� (flexibility). ���� identifier �������, ����Ϊ��ͬ��Ŀ�Ķ��仯Դ����. ��;������ѡϵͳ����Ա���ߡ�֧Ԯ����������� (��ͬ�汾����������).
� :
- #ifdef <identifier>
#ifndef <identifier>
#if <expression>
#elif <expression>
#else
#endif
- ��<identifier> ��һ���Ѿ����� (��Ӧ�ö���) �� identifier. ��Ӧ�����ij�������Ѿ����õ��ļ����ȶ���,
��Ȼ�������������Ѷ���ķ��� (symbol).
- ��<expression>�� ��һ����������ʽ (constant expression), ���㲼��
(boolean) ������. ����ʽ��, �����ں������������, ʹ����������:
- �����: ||, &&, >>, <<, +, -, *,
/, %, &, |, ^, !, ~, ==, !=, <, >, <=, >=, ?:
- �������������: (, )
������ʽ: defined(identifier)
�Լ� identifiers
- #ifdef identifier
- ������Ϊ���е���д:
- #if defined(identifier)
- #ifndef identifier
- ������Ϊ���е���д:
- #if !defined(identifier)
- #elif expression
- ������Ϊ��Щ����д:
- #else
#�� if expression
#�� endif
- /* ʹ�� #if 0�� ����������һ��Դ�����м���ע�� (comment). ������������һ�������ǰѾɵ�Դ���뱣����ԭλ,
��ֹ�µij���ʧ��. */
- #if 0
- /* �ڴ�, ��������ʽ��� (��˵��������) 0 , ���Դ˶�Դ���벻�����.
*/
- write(user_name + " �� " + total_coins + " Ԫ.\n");
- #else
- /*�� ������������� (if �����ֵ, else ���Ƿ���ֵ), ���Ի����˶γ���.
*/
- printf("%s �� %d Ԫ\n", user_name, total_coins);
- #endif
- //�� ��������� TMI �� /adm/simul_efun/system.c �����.
- #ifdef __VERSION
- string version() { return __VERSION__; }
- string version() { return MUDOS_VERSION; }
#�� if defined(VERSION)
- string version() { return VERSION; }
- string version() { return -1; }
#endif
����
#echo ������������������� stderr (STanDard ERRor, ��������) ӡ����Ϣ. ���������Ϻͳ���ʱ�dz�����.
- �:
- #echo This is a message
- #echo ���о�����Ϣ������, ������ӡ��. ��Ϣǰ���ü��� ".
�ض��ı༭������
���������������ڽ��Ĺ���.
- �:
- #pragma keyword
��
- strict_types
- save_binary
- save_types
- warnings
- optimize
- error_context
˵��:
- 'strict_types' ���߱��������� call_other() �ĺ���, �䷵��ֵ���ɺ���.
- ��'save_binary' ���߱�����Ҫ���������Ķ���λ (binary) ��. ����������ر���Ϸ֮��, ���������ʱ�����, ��Ϊ����Ѿ�����Ϊ����λ��, �������±���.
- ��'save_types' Ŀǰͣ��
- ��'warnings' ������ LPC�� Դ���뿪��һЩ�����ʩ. ��Щ���治���û�������Ԥ���еĽ����Ӧ.
- ��'optimize' ��һ��ʱ��Ľ��������Դ����Ч��.
- ��'error_context'�� �ڴ�����Ϣ��ʹ�ø��������ָʾ��һ�з�������.
����ܱ���������Ϣ���������ȳ�ƪ����ʹ�����¸�ʽ.
- � 1 :
- @marker
<... text block ...>
marker
- � 2 :
- @@marker
<... text block ...>
marker
- @���� - ����һ������ write() ���ַ���.
- @@�� - ����һ���ַ�������, ���ڷ�ҳ���� (body pager).
���� 1 :
- int help() {
- write( @ENDHELP
It's hopelessly inadequate.
ENDHELP
- );
return 1;
- �����ͬ:
- int help() {
- write( "�����������¡�\nIt's hopelessly inadequate.\n"
);
return 1;
- int help() {
- this_player()->more( @@ENDHELP
It's hopelessly inadequate.
ENDHELP
- , 1);
return 1;
- �������ͬ:
- int help() {
- this_player()->more( ({ "�����������¡�", "It's
hopelessly inadequate." }), 1);
return 1;