稀奇古怪的C语言
本帖最后由 pk1206 于 2020-3-28 23:43 编辑本帖用来记录一些稀奇古怪的C语言用法。奇怪的知识又增加了:lol
目录:
1、点点点
2、注释注释
点点点
在C语言中,有一类比较特殊的函数,它们的参数个数是不确定的,比如printf函数族,其原型如下:
int printf(const char *format, ...);即C语言用三个点来表示参数的个数是不确定的(这就是省略号么;P )。除此之外,三个点还可以表示一个区间,请看以下测试代码:
#include <stdio.h>
int main()
{
int num;
while(printf("输入一个整数:"), scanf("%d", &num) != EOF)
{
switch(num)
{
case 1 ... 4:
printf("the first case\n");
break;
case -10 ... -6:
printf("the second case\n");
break;
default:
printf("unknow case\n");
break;
}
}
return 0;
}测试结果如下:
pk@PKP73:c$ ./test_...
输入一个整数:0
unknow case
输入一个整数:1
the first case
输入一个整数:2
the first case
输入一个整数:4
the first case
输入一个整数:-7
the second case
输入一个整数:
不难看出,1/2/4 都进入了第一个case,-7进入了第二个case,而0进入了default。
也就是说,如果有连续的整数属于同一种case,可以使用三个点来简化代码,特别是范围还很大的情况下,而不必使用类似于下面的代码:
case 1:
case 2:
case 3:
case 4:缺点也还是有的:
1、使用条件太苛刻了,必须是连续的区间。如果是 1~50, 52~100的情况,还是要配合连续case语句。
2、太偏门了,如果代码的owner发生了变化,可维护性急剧下降。
注意:
1、三个点和两个数之间,必须要有空格。否则,编译会报错。
2、左边的数必须不大于右边的数。否则,编译会警告范围为空。
3、左边和右边都是闭区间,注意不要出现区间重叠。否则,编译会报错。
注释注释
奇怪的标题,不过还是能否强行说通的,第一个“注释”是动词,第二个“注释”是名词。
进入正题,调试代码的时候,可能会遇到打开一条语句,同时关闭另外一条语句情况。有可能语句比较复杂,不想删除关闭的语句。例如以下代码:
value = this_is_very_complex_func(arg1, arg2, arg3, arg4);
// value = this_is_another_very_complex_func(arg1, arg2, arg3, arg4);
如果使用单行注释,每次需要改两个地方,删除注释和添加注释。但是,巧妙的利用注释嵌套,可以做到只用改一个地方:
value = /* this_is_very_complex_func(arg1, arg2, arg3, arg4); // */ this_is_another_very_complex_func(arg1, arg2, arg3, arg4);如果加上前面的“/*”,则关闭this_is_very_complex_func(),同时打开this_is_another_very_complex_func()。反之亦然。
局限也是有的,这个只适用于单行语句,而且要改动两个字符。如果是语句块,使用条件预编译指令会更加的方便。而且条件预编译指令可以做到只用改一个字符!!!这个以后介绍。
页:
[1]