本文共 592 字,大约阅读时间需要 1 分钟。
一个令人哭笑不得的技术瞬间
最近和同事一起编写C语言代码时,经历了一个让人哭笑不得的经历。事情是这样的,如果是普通的整数直接赋值,简单地写一个int a = 123;
还是很容易的。但当涉及到大整数的赋值时,就必须用扩展的long long
来表示,以容纳更大的数值。
赋值uint64_t socket_serial = 0x1111222233334444LL;
这行代码总让我感到困惑。我们在代码编译时,finder小组发现这一行代码反常地导致程序崩溃,原因在所知的编译器报错提示中:“无法将LL附加到无关的类型”。
经过一番反复推敲,我们终于发现了问题的根源。关键词是“LL”这两个字母在什么时候才真正起作用。我在文档中搜索了相关的语言规范,才终于明白,“LL”必须紧跟在一个数字后面,而不能随便放在任何地方。也就是说,0x1111222233334444LL
的写法是正确的,但如果写成0x1111222233334444L
,或者在数字后面随便加个“L”,那就完全不行了。
这个小细节我只花了大半小时才终于弄明白,用来回去地尝试各种可能性。不过这次经历还是让我受益匪浅,学会了在编程过程中更加小心处理细节。
如果说这次经历有什么收获,那就是提醒我们在面对看似简单的语法细节时,一定要认真理解背后的规则。毕竟啊,编程虽然是一门逻辑的语言,但实际编码过程中总会有意想不到的坑在等着我们。
转载地址:http://ajzfk.baihongyu.com/