解疑 c 编程 反斜杠 的用法
今日在查看一下一个网友的程序,看到如图, 里面的反斜杠用法从来没有见过,希望大家指点一下,多谢!#ifndef __LED_H
#define __LED_H
#include "stm32f40x.h"
#define ON0
#define OFF 1
#define LED1(a) if (a) \
GPIO_SetBits(GPIOB,GPIO_Pin_5);\
else \
GPIO_ResetBits(GPIOB,GPIO_Pin_5)
#define LED2(a) if (a) \
GPIO_SetBits(GPIOB,GPIO_Pin_6);\
else \
GPIO_ResetBits(GPIOB,GPIO_Pin_6)
#define LED3(a) if (a) \
GPIO_SetBits(GPIOB,GPIO_Pin_7);\
else \
GPIO_ResetBits(GPIOB,GPIO_Pin_7)
void LED_GPIO_Config(void);
#endif
不明白楼主为啥发在飞思卡尔区,我在犹豫要不要举报,同时回复你一下。
反斜杠是续行用的,反斜杠下一行的内容仿佛就在反斜杠处。也就是C语言编译器解析出来的是一行。
这样用是因为宏定义只在当前行有效。 C语言学得不扎实吧。C语言接续符\。
这贴也发在飞思卡尔略水哇。 oner 发表于 2014-9-7 18:41
C语言学得不扎实吧。C语言接续符\。
这贴也发在飞思卡尔略水哇。
但是去掉 反斜杠, 编译就是不通过,加了{},并不是原来程序要的结果, 不懂就问,难道 飞思不用 C语言的, oner 发表于 2014-9-7 18:41
C语言学得不扎实吧。C语言接续符\。
这贴也发在飞思卡尔略水哇。
如果大家的编程水平都是顶呱呱的,还有必要过来论坛学习啊,续行符这个,结合在宏定义的时候,就是第一次, 难道这不算技术问题啊 楼上来混飞币的啊? lcofjp 发表于 2014-9-7 18:28
不明白楼主为啥发在飞思卡尔区,我在犹豫要不要举报,同时回复你一下。
反斜杠是续行用的,反斜杠下一行的 ...
多谢你的解疑, 初次遇到 宏定义 与 续行符号的结合用法,飞思单片机也有C 宏定义的吧,这也算水,如果人人都会的话,就不用发帖了 taojie 发表于 2014-9-7 18:45
但是去掉 反斜杠, 编译就是不通过,加了{},并不是原来程序要的结果, 不懂就问,难道 飞思不用 C语言的 ...
去掉反斜杠,内容要放在同一行的 建议好好学学C和指针,当然不必花时间去看完一本书,要勤翻书,这是个人想法啊。还有论坛了就有好多C语言的书籍 xujihu 发表于 2014-9-7 18:53
去掉反斜杠,内容要放在同一行的
嗯,说得对,要放在同一行的,编译就通过了, 但是阅读起来不太 清晰的,宏定义就清晰了,要不好容易 两者分离理解了,多谢!
#define ON0
#define OFF 1
#define LED1(a) if (a) GPIO_SetBits(GPIOB,GPIO_Pin_5);else GPIO_ResetBits(GPIOB,GPIO_Pin_5)
#define LED2(a) if (a) GPIO_SetBits(GPIOB,GPIO_Pin_6);else GPIO_ResetBits(GPIOB,GPIO_Pin_6)
#define LED3(a) if (a) GPIO_SetBits(GPIOB,GPIO_Pin_7);else GPIO_ResetBits(GPIOB,GPIO_Pin_7)
void LED_GPIO_Config(void);
#endif
宏定义里面 隔行连续 taojie 发表于 2014-9-7 18:48
如果大家的编程水平都是顶呱呱的,还有必要过来论坛学习啊,续行符这个,结合在宏定义的时候,就是第一 ...
不要那么激动好吗?
续行符接续符都是同一个意思,不同书籍翻译不同文字而已。你明白怎么用就行。C 语言里以反斜杠(\)表示续行。编译器会将反斜杠剔除掉,跟在反斜杠后面的字符自动接续到前一行。但是注意:反斜杠之后不能有空格。 oner 发表于 2014-9-7 19:03
不要那么激动好吗?
续行符接续符都是同一个意思,不同书籍翻译不同文字而已。你明白怎么用就行。C 语 ...
但是注意:反斜杠之后不能有空格。
多谢,问题解决! ls各位的讨论,把这个“知识点”讲清楚了。 以前经常以库的头文件里看到,不知怎么回事,楼上几位给解释清楚了 不知道这个很正常的事情,C语言里面宏的各种法还是很多的,所以不知道时候去查下就足够了。 我理解是续行 宏定义好像必须放同一行,实在没办法就用续行符,加括号肯定不行,那是在函数里的做法 大家能把这些特殊用法做一个总结贴么,貌似还有三个井号或者三个点的用法 毫无疑问,续行符{:loveliness:} 这是连接符 C语言里面有讲到 连接符,增强了可读性! 隔行继续 类似英文中的 - 换行!!! 剑舞 发表于 2014-9-7 20:12
宏定义好像必须放同一行,实在没办法就用续行符,加括号肯定不行,那是在函数里的做法 ...
你说得对, 宏定义必须放同一行,中秋快乐! 中秋快乐 根据楼主的问题,再一次体会了“飞思卡尔是个筐,什么都敢往里装”技术理论 68336016 发表于 2014-9-7 19:55
不知道这个很正常的事情,C语言里面宏的各种法还是很多的,所以不知道时候去查下就足够了。 ...
多谢体谅,这个我实在不懂就提出来问的,解决一个问题就少一个路障,中秋快乐! tim 发表于 2014-9-7 21:04
根据楼主的问题,再一次体会了“飞思卡尔是个筐,什么都敢往里装”技术理论 ...
本来这个程序就是我打算移植过来 K20板子运行的 taojie 发表于 2014-9-7 21:07
本来这个程序就是我打算移植过来 K20板子运行的
不用解释啦,别人也不傻。。。{:loveliness:} zzj0329 发表于 2014-9-7 20:31
大家能把这些特殊用法做一个总结贴么,貌似还有三个井号或者三个点的用法 ...
本想看这两日假期有空不回家,移植一个例子到飞思K20板子的,其中还遇到两个C语法问题,觉得挺精巧的,还是不提出来好了,自行消化就好了,免得有人有意见的 这问题到Google 上搜了吗,这里问快还是搜索的快 zzj0329 发表于 2014-9-7 20:31
大家能把这些特殊用法做一个总结贴么,貌似还有三个井号或者三个点的用法 ...
三个#号?没有见过。一个#表示生成字符串,#@表示生成字符,##表示连接,###这是栅栏,防止小猪跑出来
...在最初的C语言中表示函数的可变参数,后来有了C++,用作捕获所有异常,后来有了C99,在宏定义中定义可以表示可变参数
四个点那是::,C++中太常见了
C/C++中特别变态的转义字符??,估计绝大多数人没有见过,搞不好在字符串操作中会吃亏的。
这里列出一些:比如这样:int i = ??-1;可以编译通过,strlen("??!")等于1。
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~ taojie 发表于 2014-9-7 20:58
你说得对, 宏定义必须放同一行,中秋快乐!
同乐,开源快乐,共享开心,让我们把阿莫的开源共享精神进行到底 C语言接续符\ taojie 发表于 2014-9-7 18:45
但是去掉 反斜杠, 编译就是不通过,加了{},并不是原来程序要的结果, 不懂就问,难道 飞思不用 C语言的 ...
宏定义不用反斜杠 那就不是一行代码,必然编译不过。。 很少用,一遍尽量放在一行里面,以便于阅读。 lcofjp 发表于 2014-9-7 18:28
不明白楼主为啥发在飞思卡尔区,我在犹豫要不要举报,同时回复你一下。
反斜杠是续行用的,反斜杠下一行的 ...
以前只知道\后面接转义字符,现在又知道了还有续行作用 我的C也没学好啊! sunrundong 发表于 2014-9-8 08:46
以前只知道\后面接转义字符,现在又知道了还有续行作用 我的C也没学好啊! ...
没学好去看看LZ发的另一个贴子,学完这些你还不知道反谢扛是什么,打PP
C语言的好资料
http://www.amobbs.com/thread-5594840-1-1.html
(出处: amoBBS 阿莫电子论坛)
mark学习了 就是续行符,起到链接下一行的作用,续行符后面不能加注释的,加注释就编译不过 续航符,不懂就问,没什么丢脸的,露珠做得对 oner 发表于 2014-9-7 19:03
不要那么激动好吗?
续行符接续符都是同一个意思,不同书籍翻译不同文字而已。你明白怎么用就行。C 语 ...
对于C语言的续行符还是真没有用过。
在续行符后边不能有空格,但是是可以回车的吧?
续行符前边是可以有空格的吧? 剑舞 发表于 2014-9-7 20:12
宏定义好像必须放同一行,实在没办法就用续行符,加括号肯定不行,那是在函数里的做法 ...
这个不是吧,这个要根据实际情况看,有时候短短的几句,换行了也可以增加可读性的
比如这个
#define TCP_REG(pcbs, npcb) \
do { \
npcb->next = *pcbs; \
*(pcbs) = npcb; \
tcp_timer_needed(); \
} while (0) taojie 发表于 2014-9-7 20:58
你说得对, 宏定义必须放同一行,中秋快乐!
没有什么必须不必须的,就比如下面这个,你认为有错吗
/** This is the actual memory used by the pools. */
static u8_t memp_memory[MEM_ALIGNMENT - 1
#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) )
#include "lwip/memp_std.h"
];
这段是lwip的源码,我第一看到这段,差点就疯掉 连接符 续行符的意思,当一行写不下的时候 wxfje 发表于 2014-9-8 09:44
这个不是吧,这个要根据实际情况看,有时候短短的几句,换行了也可以增加可读性的
比如这个
麻烦你看清楚再发表议论行不行?后面的话看见了没,实在没办法可以用续行符,你那个做法不就是在用续行符,懂得不要断章取义,不懂要谦虚,不要乱发表意见,会让人笑掉大牙的 剑舞 发表于 2014-9-8 10:12
麻烦你看清楚再发表议论行不行?后面的话看见了没,实在没办法可以用续行符,你那个做法不就是在用续行符 ...
问题在于什么叫实在没办法,一行里面有100列叫实在没办法,还是一行有1000列叫实在没办法
我发表议论没错,我只是发表我个人的见解,我个人的理解,我没有针对您,也没有针对任何人,
如果我错了,我会改,在此给您道歉了,对不起哥们 wxfje 发表于 2014-9-8 09:49
没有什么必须不必须的,就比如下面这个,你认为有错吗
/** This is the actual memory used by the pool ...
能解释一下这段程序吗?看不懂啊 PCBBOY1991 发表于 2014-9-8 09:41
对于C语言的续行符还是真没有用过。
在续行符后边不能有空格,但是是可以回车的吧?
续行符前边是可以有 ...
你的理解是正确的。 oner 发表于 2014-9-8 12:02
你的理解是正确的。
后面卜但不能没空格,还不能有任何东西包括注释 不懂就问,没啥事情,反正会有大神帮你解答的...........{:lol:}{:lol:} 楼上已经有正确答案了,续航用 看代码就猜出来 holts2 发表于 2014-9-8 09:12
没学好去看看LZ发的另一个贴子,学完这些你还不知道反谢扛是什么,打PP
C语言的好资料
好的,得加紧学习了! 续行用的,楼上的已经表述很清楚了,这里就不重复叙述了,这个就是为了程序观看起来直观易懂,其实你把所有内容放在一行里面也是可以的,但是看起来就没那么爽了 这个明显来抓收入的,随便一搜就能找到! 这不应算水贴,任何知识有深有浅,不能说浅的知识就是水吧,经大家讨论,也可以帮助更多的坛友。对老师们也是温故知新麻。 换行“\” 我觉得这个发到其它区就不算水贴,发到飞思卡尔区就应该算水帖。 额,基础不扎实啊 学习了,之前看到也不明觉厉,很多知识新手书上不一定看得到,有人点拨下是最好的 涨姿势了 断行用的啊 涨姿势了 第一是在野火的程序上看到的,是续航的作用 有时为了看着整齐,代码中可以用括号,运算符等进行换行。
但在宏里面,没有代码中自由,而且用宏就要写明意思,所以有的宏会很长,这时不得不由续行符出现了。 学习了。 mark newbie 发表于 2014-9-9 10:52
你这个是不同情况
这个本质是一个数组
我只是想说明C的用法太多,有时候很难判断 续行符,其实可以一行写完的,但层次好看就用续行符。 野火的STM32教程里面LED设置就用的这个,你这个程序有可能源自野火程序,野火教程也对这一点有说明{:lol:} 续行符,编译器会自动删掉,变成一行 这个应该是续行符吧 不过有的编译器貌似不加也可以续行的 换行,这两行就相当于写在一行里 续行符,我也是一年前才知道的 平常写的程序都不大,还真不知道这个用法,这回学习了。 反斜杠是续航付,只是平时少用。 野火的库吧,续行作用 wxfje 发表于 2014-9-9 21:42
我只是想说明C的用法太多,有时候很难判断
这就看你的C语言基础是否扎实了。许多都是很基础的东西。 这是从续航符,野火的教程中讲的很清楚啊 这个不是STM32的么,貌似还是野火的 反斜杠是续行符吧,表示连接下一行的
页:
[1]