程序员之---C语言细节19(来找茬,由/* */ 引起的凝视错误)
2017-07-25 09:46 tlnshuju 阅读(248) 评论(0) 编辑 收藏 举报主要内容:由/* */ 引起的凝视错误
有4处凝视错误
#include <stdio.h> #define N 10 //使用以下宏定义的凝视 #define BSC // #define BMC /* #define EMC */ BSC daewawe BMC fewafewa EMC //凝视优先于宏定义被预处理。当展开宏之前凝视已经处理完成,这是再展开宏出现// /**/就会出错 // 不知道你有没有看出以下凝视中那里除了问题 int main() { /*dewag int test; // 这里是典型的凝视错误。少了一个凝视的下半部分,从开头的/*到以下遇到的第一个右凝视符曾经,他们之间都被凝视。 printf("an error\n"); //造成int test; printf();语句都被凝视 /*dafewageawgeawg測啊測 */ int/**/b; //int和b之间没有空格,这里之所以不会出错是由于凝视/**/被空格替代,证明方式例如以下 # define r 1 //#和define之间能够空格 #/*ee*/define/**fea/int/*feagea*/INT_32 in/**/t a; int i = r; int *p = i int j = i/*p; // 编译器吧/* 当成凝视的一部分,注意这个细节/*之间没有空格就当成凝视的前半部分了 // int test; \ hahahha 这个凝视是正确的哦,\有连接性。vc中\后不能有空格,在gcc、mingw5中能够有 // 使用"//"凝视方法有一个移植性问题。所以採用以下凝视方法是有它的道理的 #if 0 // 这里不知道怎么測试了 void* t; p = N * sizeof((int)*t); // 这里不是把未知类型t转换成int型。而是int长度乘以 #endif return 0; }
总结:
1、凝视应当准确、易懂、防止有二义性,错误的凝视有害无益
2、一目了然的语句不加凝视
3、全局数据(全局变量、常量定义等)必需要加凝视
4、凝视採用英文。尽量避免在凝视中使用缩写。由于不一定全部的编译器都能显示中文,你的代码不一定是懂中文的人看
5、数值单位一定要凝视
6、变量范围给出凝视