c语⾔中双反斜杠的作⽤,有关c语⾔中的反斜杠
2020-02-02
关键字:反斜杠趣谈
稍微懂点编程的同学,甭管是哪种编程语⾔,都知道甚⾄是在代码中⽤过反斜杠。
反斜杠这东西的最为⼈所知的作⽤就是作为“转义字符”以及“连接符”来使⽤。
例如,常见的正则表达式⽤途:
grep -nr "init*\.rc"
以及在 c语⾔ 领域常见的连接代码⽤途:
#define LOG(a,b) do{\printf("[LOG]%d--%d", a, b); \
}while(0)
但笔者偶然间发现反斜杠的⼀个很隐秘⼜有趣的地⽅。
先来看下⾯这个⽰例程序,我们来猜猜它的执⾏结果是什么:
#include
int cal_length(char *);intmain()
{int amount;char *info = "China and France should respect each other.";//TODO 要考虑到单双引号前⾯的转义字符\
amount =cal_length(info);
printf("The amount of the sentance:%d\n", amount);return 0;
}int cal_length(char *sen)
{int len = 0;while(*(sen + len) != '\0')
{
len++;
}returnlen;
}
正确答案是:不确定!
如上图,同⼀个编译结果,多次执⾏会出现不⼀致的结果值。
是我写的 cal_length() 算法有问题吗?
显然不是,不⽤去怀疑我的 cal_length() 函数。
既然计算字符串长度的算法没问题,传参的⽅式也没问题,原始字符串也没问题,取结果的⽅式也没问题。那为什么最终的结果怎么会是这样的呢?
刚开始我也百思不得其解,各种加打印改算法都⽆济于事。
直到最后,我不得不怀疑上⾯的代码中 amount = cal_length(info); 这⼀句根本没有去执⾏。
然后我开始验证,发现直接将这句代码删掉,编译以后的结果和前⾯是⼀样的,结果值是⼀个不确定的值。
然后再去给定义 amount 变量的地⽅指定初始值,发现这时程序运⾏结果值就是确定的值了,我给 amount 初始化了什么值,它的运⾏结果就是什么值。
到这已经确定了,我上⾯的代码中 amount = cal_length(info); 语句根本就没有执⾏。
⽽不⾏它的原因就是因为我在它上⾯加的那⼀句注释。
在那⾏注释最后⾯有⼀个反斜杠 '\',C编译器直接将这个反斜杠理解为了“连接符”,认为它的下⾯⼀⾏仍然是注释内容。
真是清新脱俗的⼀个乌龙错误。
同时也不得不感叹⼩⼩⼀个反斜杠也有这么多门道。
c语言如何去学

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。