程序员之---C语言细节19(来找茬,由/* */ 引起的凝视错误)

主要内容:由/* */ 引起的凝视错误

有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
"); //造成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、变量范围给出凝视



原文地址:https://www.cnblogs.com/tlnshuju/p/7232358.html