zoukankan      html  css  js  c++  java
  • CPP Info Memo (Part 1)

    CPP Info Memo (Part 1)

    1 Overview

     

    1.1 Initial Processing

     

    1.1.1 End Of Line (EOL)

    GCC 能够识别的 EOL 包括 ASCII 码中的 LF, CR LF 和 CR , 也就是传说中的 "\n" "\r\n" 和 "\r"。

    换句话说,即便在 Linux 下去编译 Windows 或者老的 Mac OS 下写的代码, 也完全没有问题。但是,无论采用哪中 EOL , EOL 在整个文件中应该保持一致, 否则 GCC 可能无法处理行号。

    此外,如果文件的结尾没有换行符, GCC 会认为最后一个 EOL 由 EOF 来提供, 但标准 C 中规定,该情形会触发未知的行为(undefined behaviour), 所以 GCC 会在这种情况下给出一个 Warning 。

    1.1.2 Continued lines

    "\" 用来折行,但 "\" 后面可以接若干 Whitespace ,这些 Whitespace 将会被忽略。 "\" 后面的 WS 经常是拼写时候不小心弄上去的,所以 GCC 会对此给出警告。

    1.1.3 Comments

    • 1注释在预编译阶段被替换成 Whitespace,注释无嵌套, Block comments 和 Line Comments 都是如此。

      一般来讲,从编译器的角度来看,将两者混杂在一起也无不可。如:

      /* block comment
      // contains line comment
         yet more comment
      */ outside comment
      
      // line comment /* contains block comment */
      
    • 2但要注意,不要把 block comments 的尾部从注释中给剥离出来,形如:
      // l.c.  /* block comment begins
         oops! this isn't a comment anymore */
      
    • 3 String 中的 "\/*" 和 "*/" 不会被看成注释。
    • 4 此外, 在 C89 中,没有 Line comment 这个东东,他是在 C99 后才加到标准中的, 也就是说,如果我们用的编译器很老,那么有可能不支持 "//" 这种注释。
    • 5最后一点, 预处理是在程序编译的最早阶段执行的,所以即便是下面的这种古怪的写法,实际上也是合法的:
      /\
      *
      */ # /**/ defi\
      ne FO\
      O 10\
      20
      

      它实际上等同于:

      #define F00 1020
      

      但从程序的可读性上来讲,上面的写法并不提倡。

  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/yangyingchao/p/2227599.html
Copyright © 2011-2022 走看看