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
      

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

  • 相关阅读:
    mysql router读写分离
    Hbase单节点Standalone & Pseudo Distribute
    WAS web.xml修改不生效
    Hadoop单节点集群
    网易云音乐 linux版
    OpenLDAP GUI管理工具
    Memcached源码安装配置
    CentOS7 /var/log/messages Starting Session x of user root
    linux下安装jdk(转载)
    ubuntu安装rpm格式文件方法(转载)
  • 原文地址:https://www.cnblogs.com/yangyingchao/p/2227599.html
Copyright © 2011-2022 走看看