关于define的问题

  1. #include <stdio.h>
  2.  
  3. #define NL '\n'
  4.  
  5. int main()
  6. {
  7.         printf("Line1NL");
  8.         printf("Line2NL");
  9.  
  10.         return 0;
  11. }

复制代码


运行一下你会发现并不会换行……
这是因为 NL 被放在字符串中,就仅被当做普通字符表示,define 并不会去处理它

正确做法如下:

  1. #include <stdio.h>
  2.  
  3. #define NL '\n'
  4.  
  5. int main()
  6. {
  7.         printf("Line1%c", NL);
  8.         printf("Line2%c", NL);
  9.  
  10.         return 0;
  11. }

对于以上的两个程序,我还是不能很好地理解为什么在第一个程序中不能换行

怎么说呢,主要是为了防止歧义或避免一些不必要的问题才这么设计的。因为字符串不在那么单纯,如果以后真的有人这么干,可能出问题都不知道哪里出得问题。甚至还会带来很多严重的 bug。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,欢迎您加入CSDN!

目前问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632