📄 cpplib.h
字号:
char objc; /* Nonzero means this is an assembly file, and allow unknown directives, which could be comments. */ int lang_asm; /* Nonzero means turn NOTREACHED into #pragma NOTREACHED etc */ char for_lint; /* Nonzero means handle CHILL comment syntax and output CHILL string delimiter for __DATE___ etc. */ char chill; /* Nonzero means copy comments into the output file. */ char put_out_comments; /* Nonzero means don't process the ANSI trigraph sequences. */ char no_trigraphs; /* Nonzero means print the names of included files rather than the preprocessed output. 1 means just the #include "...", 2 means #include <...> as well. */ char print_deps; /* Nonzero if missing .h files in -M output are assumed to be generated files and not errors. */ char print_deps_missing_files; /* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */ char print_deps_append; /* Nonzero means print names of header files (-H). */ char print_include_names; /* Nonzero means try to make failure to fit ANSI C an error. */ char pedantic_errors; /* Nonzero means don't print warning messages. -w. */ char inhibit_warnings; /* Nonzero means warn if slash-star appears in a comment. */ char warn_comments; /* Nonzero means warn if there are any trigraphs. */ char warn_trigraphs; /* Nonzero means warn if #import is used. */ char warn_import; /* Nonzero means warn if a macro argument is (or would be) stringified with -traditional. */ char warn_stringify; /* Nonzero means turn warnings into errors. */ char warnings_are_errors; /* Nonzero causes output not to be done, but directives such as #define that have side effects are still obeyed. */ char no_output; /* Nonzero means don't output line number information. */ char no_line_commands;/* Nonzero means output the text in failing conditionals, inside #failed ... #endfailed. */ char output_conditionals; /* Nonzero means -I- has been seen, so don't look for #include "foo" the source-file directory. */ char ignore_srcdir;/* Zero means dollar signs are punctuation. -$ stores 0; -traditional may store 1. Default is 1 for VMS, 0 otherwise. This must be 0 for correct processing of this ANSI C program: #define foo(a) #a #define lose(b) foo (b) #define test$ lose (test) */ char dollars_in_ident;#ifndef DOLLARS_IN_IDENTIFIERS#define DOLLARS_IN_IDENTIFIERS 1#endif /* Nonzero means try to imitate old fashioned non-ANSI preprocessor. */ char traditional; /* Nonzero means give all the error messages the ANSI standard requires. */ char pedantic; char done_initializing; struct file_name_list *include; /* First dir to search */ /* First dir to search for <file> */ /* This is the first element to use for #include <...>. If it is 0, use the entire chain for such includes. */ struct file_name_list *first_bracket_include; /* This is the first element in the chain that corresponds to a directory of system header files. */ struct file_name_list *first_system_include; struct file_name_list *last_include; /* Last in chain */ /* Chain of include directories to put at the end of the other chain. */ struct file_name_list *after_include; struct file_name_list *last_after_include; /* Last in chain */ /* Chain to put at the start of the system include files. */ struct file_name_list *before_system; struct file_name_list *last_before_system; /* Last in chain */ /* Directory prefix that should replace `/usr' in the standard include file directories. */ char *include_prefix; char inhibit_predefs; char no_standard_includes; char no_standard_cplusplus_includes;/* dump_only means inhibit output of the preprocessed text and instead output the definitions of all user-defined macros in a form suitable for use as input to cccp. dump_names means pass #define and the macro name through to output. dump_definitions means pass the whole definition (plus #define) through*/ enum {dump_none = 0, dump_only, dump_names, dump_definitions} dump_macros;/* Nonzero means pass all #define and #undef directives which we actually process through to the output stream. This feature is used primarily to allow cc1 to record the #defines and #undefs for the sake of debuggers which understand about preprocessor macros, but it may also be useful with -E to figure out how symbols are defined, and where they are defined. */ int debug_output; /* Pending -D, -U and -A options, in reverse order. */ struct cpp_pending *pending; /* File name which deps are being written to. This is 0 if deps are being written to stdout. */ char *deps_file; /* Target-name to write with the dependency information. */ char *deps_target;};#define CPP_TRADITIONAL(PFILE) (CPP_OPTIONS(PFILE)-> traditional)#define CPP_PEDANTIC(PFILE) (CPP_OPTIONS (PFILE)->pedantic)#define CPP_PRINT_DEPS(PFILE) (CPP_OPTIONS (PFILE)->print_deps)/* Name under which this program was invoked. */extern char *progname;/* The structure of a node in the hash table. The hash table has entries for all tokens defined by #define commands (type T_MACRO), plus some special tokens like __LINE__ (these each have their own type, and the appropriate code is run when that type of node is seen. It does not contain control words like "#define", which are recognized by a separate piece of code. *//* different flavors of hash nodes --- also used in keyword table */enum node_type { T_DEFINE = 1, /* the `#define' keyword */ T_INCLUDE, /* the `#include' keyword */ T_INCLUDE_NEXT, /* the `#include_next' keyword */ T_IMPORT, /* the `#import' keyword */ T_IFDEF, /* the `#ifdef' keyword */ T_IFNDEF, /* the `#ifndef' keyword */ T_IF, /* the `#if' keyword */ T_ELSE, /* `#else' */ T_PRAGMA, /* `#pragma' */ T_ELIF, /* `#elif' */ T_UNDEF, /* `#undef' */ T_LINE, /* `#line' */ T_ERROR, /* `#error' */ T_WARNING, /* `#warning' */ T_ENDIF, /* `#endif' */ T_SCCS, /* `#sccs', used on system V. */ T_IDENT, /* `#ident', used on system V. */ T_ASSERT, /* `#assert', taken from system V. */ T_UNASSERT, /* `#unassert', taken from system V. */ T_SPECLINE, /* special symbol `__LINE__' */ T_DATE, /* `__DATE__' */ T_FILE, /* `__FILE__' */ T_BASE_FILE, /* `__BASE_FILE__' */ T_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */ T_VERSION, /* `__VERSION__' */ T_SIZE_TYPE, /* `__SIZE_TYPE__' */ T_PTRDIFF_TYPE, /* `__PTRDIFF_TYPE__' */ T_WCHAR_TYPE, /* `__WCHAR_TYPE__' */ T_USER_LABEL_PREFIX_TYPE, /* `__USER_LABEL_PREFIX__' */ T_REGISTER_PREFIX_TYPE, /* `__REGISTER_PREFIX__' */ T_TIME, /* `__TIME__' */ T_CONST, /* Constant value, used by `__STDC__' */ T_MACRO, /* macro defined by `#define' */ T_DISABLED, /* macro temporarily turned off for rescan */ T_SPEC_DEFINED, /* special `defined' macro for use in #if statements */ T_PCSTRING, /* precompiled string (hashval is KEYDEF *) */ T_UNUSED /* Used for something not defined. */ };/* Structure returned by create_definition */typedef struct macrodef MACRODEF;struct macrodef{ struct definition *defn; U_CHAR *symnam; int symlen;};/* Structure allocated for every #define. For a simple replacement such as #define foo bar , nargs = -1, the `pattern' list is null, and the expansion is just the replacement text. Nargs = 0 means a functionlike macro with no args, e.g., #define getchar() getc (stdin) . When there are args, the expansion is the replacement text with the args squashed out, and the reflist is a list describing how to build the output from the input: e.g., "3 chars, then the 1st arg, then 9 chars, then the 3rd arg, then 0 chars, then the 2nd arg". The chars here come from the expansion. Whatever is left of the expansion after the last arg-occurrence is copied after that arg. Note that the reflist can be arbitrarily long--- its length depends on the number of times the arguments appear in the replacement text, not how many args there are. Example: #define f(x) x+x+x+x+x+x+x would have replacement text "++++++" and pattern list { (0, 1), (1, 1), (1, 1), ..., (1, 1), NULL } where (x, y) means (nchars, argno). */typedef struct definition DEFINITION;struct definition { int nargs; int length; /* length of expansion string */ int predefined; /* True if the macro was builtin or */ /* came from the command line */ U_CHAR *expansion; int line; /* Line number of definition */ char *file; /* File of definition */ char rest_args; /* Nonzero if last arg. absorbs the rest */ struct reflist { struct reflist *next; char stringify; /* nonzero if this arg was preceded by a # operator. */ char raw_before; /* Nonzero if a ## operator before arg. */ char raw_after; /* Nonzero if a ## operator after arg. */ char rest_args; /* Nonzero if this arg. absorbs the rest */ int nchars; /* Number of literal chars to copy before this arg occurrence. */ int argno; /* Number of arg to substitute (origin-0) */ } *pattern; union { /* Names of macro args, concatenated in reverse order with comma-space between them. The only use of this is that we warn on redefinition if this differs between the old and new definitions. */ U_CHAR *argnames; } args;};extern U_CHAR is_idchar[256];/* Stack of conditionals currently in progress (including both successful and failing conditionals). */struct if_stack { struct if_stack *next; /* for chaining to the next stack frame */ char *fname; /* copied from input when frame is made */ int lineno; /* similarly */ int if_succeeded; /* true if a leg of this if-group has been passed through rescan */ U_CHAR *control_macro; /* For #ifndef at start of file, this is the macro name tested. */ enum node_type type; /* type of last directive seen in this group */};typedef struct if_stack IF_STACK_FRAME;extern void cpp_buf_line_and_col PARAMS((cpp_buffer*, long*, long*));extern cpp_buffer* cpp_file_buffer PARAMS((cpp_reader*));extern void cpp_define PARAMS ((cpp_reader*, U_CHAR*));extern void cpp_error ();extern void cpp_warning ();extern void cpp_pedwarn ();extern void cpp_error_with_line ();extern void cpp_pedwarn_with_line ();extern void cpp_pedwarn_with_file_and_line ();extern void fatal ();extern void cpp_error_from_errno ();extern void cpp_perror_with_name ();extern void cpp_pfatal_with_name ();extern void cpp_grow_buffer PARAMS ((cpp_reader*, long));extern int cpp_parse_escape PARAMS ((cpp_reader*, char**));extern cpp_buffer* cpp_push_buffer PARAMS ((cpp_reader *, U_CHAR*, long));extern cpp_buffer* cpp_pop_buffer PARAMS ((cpp_reader *));extern cpp_hashnode* cpp_lookup PARAMS ((cpp_reader*, const U_CHAR*, int, int));#ifdef __cplusplus}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -