当前位置:  技术问答>linux和unix

#define _ROOT_PATH 中_ROOT_PATH的值是什么

    来源: 互联网  发布时间:2017-05-28

    本文导语:  #define  _ROOT_PATH 中_ROOT_PATH的值是什么,如果有,是什么类型的值,怎么验证? | It doesn't have a type that you may think it should have for all variables you defined in your c/c++ codes. It was proces...

#define  _ROOT_PATH 中_ROOT_PATH的值是什么,如果有,是什么类型的值,怎么验证?

|
It doesn't have a type that you may think it should have for all variables you defined in your c/c++ codes. It was processed during the preprocessing stage of compilation. When the output is fed to the scanner/parser for further process, this macro is gone...

Here is a copy/paste from 

❑ Preprocessing —All pre-processor actions are performed in this phase. Depending on the
compiler version, this phase is supported by an external utility (cpp) or by special library
functions— both are initiated automatically by the compiler. On completion of preprocessing,
there is only one (large) input file generated from the source file and all header files are included
using the #include directive. The compiler itself is then no longer required to take account of
the distributed structure of C programs over several files.

❑ Scanning and Parsing — The syntax of a programming language can be described by means
of grammatical rules that are similar to those of a natural language such as English but that
must understandably be much more restrictive. (Although the existence of several alternatives
to represent one and the same fact contribute greatly to the appeal and subtlety of a language,
ambiguity must be avoided at all costs in programming languages.) This phase usually comprises
two closely linked tasks. The scanner analyzes the source text character-by-character and
looks for keywords of the programming language. The parser takes the input stream supplied by
the scanner and already abstracted from source text representation and checks that the structures
it detects are correct in terms of the grammar rules of the language. It also creates data structures
in computer memory that are a further abstraction of the source code and are designed for processing
by a computer (in contrast to the actual source code of the program that should be as
easy as possible to read and manipulate by human beings).

❑ Intermediate Code Generation — A further step along the path toward the final machine
code converts the parse tree (i.e., the data structure created in memory) set up by the
scanner and parser into another language known as the register transfer language (RTL).
This is a kind of assembly language for a hypothetical machine. This language can be
optimized—independently of the target processor for the most part. However, this does
not mean that the RTL code generated in this phase of the compilation process is the same
for all target processors. Depending on the architecture, a range of assembler statements are
available— and this fact must be taken into account during RTL generation.
The individual statements of the RTL are already on a very low level and are a step away from
the high-level C language on the path to the assembly language. Their main task is to manipulate
register values to support execution of the compiled program. There are, of course, also conditional
statements and other mechanisms to control program flow. However, this intermediate
code still includes various elements and structures common to higher-level programming languages
(these are not specific to a particular language such as C, Pascal, etc.) that do not appear
in a pure assembly language.

❑ Optimization— The most compute-intensive phase of program compilation is optimization
of the intermediate code in the RTL language. The reasons why programs are optimized are
clear. But how is this done by the compiler? Because the mechanisms used are generally not
only complex but also sophisticated and even devious (subtle details must always be taken intoaccount), it would not be difficult to write a long tome on optimization techniques alone, and a
further one on their usage in the GCC. Nevertheless, this appendix illustrates at least some of
the techniques employed. All optimization options are based on ideas that initially appear to
be relatively simple. However, in practice (and in theory) they are difficult to implement. Such
options include, above all, the simplification of arithmetic expressions (algebraic rewriting of
terms into expressions that can be computed more efficiently and/or with a less-intensive use of
memory), elimination of dead code (parts of code that cannot be reached by the program flow),merging of repeated expressions and items of code in a program, rewriting of program flow into
a more efficient form, and so on—these are covered as individual topics in this appendix.

❑ Code generation— The last phase is concerned exclusively with the generation of the actual
assembler code for the target processor. However, this does not yet produce an executable
binary file, but instead, it produces a text file with assembler instructions that is converted
into binary machine code by further external programs (assemblers and possibly linkers). In
principle, the assembler code has the same form as the code of the final program but can still be
read by humans (not by machines) even if the power of the individual commands has reached
machine level.

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c/c++预处理命令预#define语法和例子
  • #define MODULE 什么意思啊?
  • 不解:#define SIG_ERR ((void (*)(int))-1)
  • #define包含"的問題
  • define后只有一个参数的疑问
  • 命令求解:去掉#define语句中的sizeof()
  • #define一行太长怎么办?我看代码中用了可惜gcc 编译时出错了
  • #define DEFAULT_CMDLINE
  • but is not defined as a type
  • #define MAX_LOCKDEP_SUBCLASSES 8UL 这个8UL是什么意思呢 ?
  • 求助:LINUX内核代码中# 与define之间有空格是怎么回事?
  • makefile里面如何运用 #define iis7站长之家
  • 内核中#define LBS_DEB_LL(grp, grpnam, fmt, args...)意义?
  • 请教宏定义 #define TEST(s) #s 表示了什么?
  • 请问宏#define SYMBOL_NAME_STR(X) #X干什么用啊
  • makefile里面如何运用 #define
  • ThinkPHP模板判断输出Defined标签用法详解
  • 关于define的一个问题
  • # define PTHREAD_MUTEX_INITIALIZER { { 0, 0, 0, 0, 0, 0, { 0, 0 } } } 看不懂
  • #define send _send 那么_send是在哪里实现的呢?minix源代码
  • 宏定义中:#define EXT3_SINGLEDATA_TRANS_BLOCKS 8U //8U是什么意思啊?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3