/* 检查led 控制的两个参数,如果没有参数输入则退出。*/
if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||
on < 0 || on > 1 || led_no < 0 || led_no > 3)
事实上这段代码并不是只检查命令行参数的个数是否为3, '||'的逻辑会让这个if语句一直判断到条件成立或者所有的判断都完成为止,即
如果argc != 3不为true, 继续执行sscanf(argv[1], "%d", &led_no) 并且判断sscanf()的返回值;
如果sscanf(argv[1], "%d", &led_no) != 1不为true, 继续执行后面的sscanf(argv[2],"%d", &on)并判断其返回值;
....一直到所有的判断全部完成。
如果每一个判断都不为true,事实上也就执行了所有的判断语句,即从命令行参数上输入了led_no和on的值。
这段代码写的很有'技巧',但不是好的编程风格。
你能提出这样的问题很好,C编程事实上有很多值得讨论的地方,希望这样的帖子在论坛上越来越多。