程序员之---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\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、变量范围给出凝视
程序员之---C语言细节19(来找茬,由/* */ 引起的凝视错误)的更多相关文章
- 程序员之---C语言细节12(指针和数组细节,"//"的可移植性说明)
主要内容:指针和数组细节,"//"的可移植性说明 #include <stdio.h> int main(int argc, char **argv) { int a[ ...
- 程序员之---C语言细节22(函数返回指针注意事项<悬空指针>、查看进程能够分配的内存大小)
主要内容:函数返回指针注意事项<悬空指针>.查看进程能够分配的内存大小 #include <stdio.h> char * favorite_fruit() { static ...
- 程序员之---C语言细节20(符号和有符号之间转换、两数相加溢出后数值计算)
主要内容:无符号和有符号之间转换.两数相加溢出后数值计算 #include <stdio.h> /* 这个函数存在潜在漏洞 */ float sum_elements(float a[], ...
- 程序员之--C语言细节13(二维数组和指针,&*a[i][0]的理解,数组1[e]和e[1]非常可能你没见过)
主要内容:二维数组和指针.&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_C ...
- 程序员之---C语言细节24(段错误、类型提升、sizeof 'A')
主要内容:段错误.类型提升.sizeof 'A' #include <stdio.h> int main() { union test{ char a[10]; int b; }u; i ...
- 程序员之---C语言细节18(一些奇怪表达式)
主要内容:一些奇怪表达式 #include <stdio.h> #define N 10 int main() { int a = 1; int *q = &a; int p = ...
- .Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)
过去几年都在忙着找项目,赶项目,没有时间好好整理深究自己在工作中学到的东西.现在好了,趁着找工作的这段空余时间,正好可以总结和再继续夯实自己的.Net, C#基本功.在05年的时候,Scott Han ...
- 10个足以让你成为更优秀的程序员的C语言资源
一些人觉得编程无聊,一些人觉得它很好玩.但每个程序员都必须紧跟编程语言的潮流.大多数程序员都是从C开始学习编程的,因为C是用来写操作系统.应用程序最常用的语言. · C编程笔记 这些是华盛顿实验学院C ...
- 黑马程序员——经典C语言程序设计100例
1.数字排列 2.奖金分配问题 3.已知条件求解整数 4.输入日期判断第几天 5.输入整数进行排序 6.用*号显示字母C的图案 7.显示特殊图案 8.打印九九口诀 9.输出国际象棋棋盘 10.打印楼梯 ...
随机推荐
- iOS8下的远程推送
本篇文章主要介绍了"iOS8下的远程推送",主要涉及到方面的内容,对于IOS开发感兴趣的同学可以参考一下: 昨天做了一下远程推送,今天写下来,分享给需要的人.参考了很多篇文章,或许 ...
- requestFeature() must be called before adding content
错误:requestFeature() must be called before adding content 原因: Android去掉标题栏点菜单键程序崩溃 在安卓以前的版本中,我们会使用以下两 ...
- 【转】蘑菇街面试经历(已拿到offer)
最近正好接到了蘑菇街的面试通知,顿时很欣喜,还在等通知,不知结果如何. 首先安排了一次电话面试,大体内容时现在工作的一个状态,主要负责的项目功能,模块,以及架构例如,高并发网站优化,负载均衡等等,还会 ...
- SqlServer发布订阅错误收集
原文:SqlServer发布订阅错误收集 目录 1. SqlServer发布订阅错误收集 1.1. Message:脚本对于表"dbo.table"失败. 1.1.1. 错误消息 ...
- DoTween 部分中文文档
前言 DOTween现在还处于 alpha,所以还有一些缺失的功能(如路径插件,附加回调和其它的tween选项),这个文档在不久的将来可能会改变. 一.术语 Tweener 一个tween控制valu ...
- 【spring boot】集成了druid后,同样的mybatis模糊查询语句出错Caused by: com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'name LIKE '%' ? '%'
druid版本是 <!-- https://mvnrepository.com/artifact/com.alibaba/druid 数据库连接池--> <dependency> ...
- window coordinate
到ndc的转换是通过(x/w,y/w,z/w) 到了 window coordinates dx upper left gl lower left setviewport setscissor rt ...
- SQL SERVER 使用订阅发布同步数据库(转)
一.数据库复制涉及 1.发布服务器: 数据的来源服务器,维护源数据,决定哪些数据将被分发,检测哪些数据发生了修改,并将这些信息提交给分发服务器. 2.分发服务器: 分发服务器负责把从发布服务器拿 ...
- WAMP设置
当安装好WAMP后,windows右下角会出现WAMP Server的图标,如图所示! 当中集成了PHP开发的常用功能. Localhost:表示启动浏览器打开本地首页 My Projects:项目文 ...
- golang一些知识点
2.冒泡排序(二维数组使用): func main() { i := 1 MYLABEL: for { i++ if i > 3 { break MYLABEL } } fmt.Println( ...