zoukankan      html  css  js  c++  java
  • C语言中的#define预处理指令

    本文链接:http://www.cnblogs.com/xxNote/p/4009460.html

    今天看C Primer Plus里面看449页里面 16.2.1语言符号 讲到从技术方面看,系统把宏的主体当作语言符号类型字符串,而不是字符型字符串。这句话感到不是很理解,结合450页的那个例子自己写个小程序测试一下:

    #include <stdio.h>
    #include <STDLIB.H>
    #define TEST 1	+	3
    #define TEST 1 + 3
    #define TEST 1+3
    int main(void)
    {
    	printf("%d
    ", TEST);
    
    	return 0;
    }
    

    编译一下会发现:

    结合这个warning就容易理解了,对于第三行来说,宏的主体有三个分别是1+ 3共三个语言符号,第四行的宏主体的同样是1 + 3共三个语言符号,而不管这三个语言符号之间有几个空格或TAB制表符,但第五行的宏主体只有1+3一个语言符号,因此第五行出现警告说宏被重定义了,而第四行虽然重定义了但是宏的主体和原来是一样的所以没有报warning。对于宏的重定义不同编译器采用不通的策略。

  • 相关阅读:
    pinus学习(3)
    pinus学习(2)
    HBASE架构解析(二)
    排序算法
    泛型原理
    《JAVA NIO》第二章缓冲区
    @SuppressWarnings
    网络编程
    synchronized原理
    第十六节:pandas之日期时间
  • 原文地址:https://www.cnblogs.com/xxNote/p/4009460.html
Copyright © 2011-2022 走看看