搜索
bottom↓
回复: 84

解疑 c 编程 反斜杠 的用法

  [复制链接]

出0入0汤圆

发表于 2014-9-7 18:23:48 | 显示全部楼层 |阅读模式
今日在查看一下一个网友的程序,看到如图, 里面的反斜杠用法从来没有见过,希望大家指点一下,多谢!

#ifndef __LED_H
#define        __LED_H

#include "stm32f40x.h"
#define ON  0
#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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-9-7 18:28:32 | 显示全部楼层
不明白楼主为啥发在飞思卡尔区,我在犹豫要不要举报,同时回复你一下。
反斜杠是续行用的,反斜杠下一行的内容仿佛就在反斜杠处。也就是C语言编译器解析出来的是一行。
这样用是因为宏定义只在当前行有效。

出0入4汤圆

发表于 2014-9-7 18:41:57 | 显示全部楼层
C语言学得不扎实吧。C语言接续符\。
这贴也发在飞思卡尔略水哇。

出0入0汤圆

 楼主| 发表于 2014-9-7 18:45:44 | 显示全部楼层
oner 发表于 2014-9-7 18:41
C语言学得不扎实吧。C语言接续符\。
这贴也发在飞思卡尔略水哇。

但是去掉 反斜杠, 编译就是不通过,加了{},并不是原来程序要的结果, 不懂就问,难道 飞思不用 C语言的,

出0入0汤圆

 楼主| 发表于 2014-9-7 18:48:36 | 显示全部楼层
oner 发表于 2014-9-7 18:41
C语言学得不扎实吧。C语言接续符\。
这贴也发在飞思卡尔略水哇。

如果大家的编程水平都是顶呱呱的,还有必要过来论坛学习啊,  续行符这个,结合在宏定义的时候,就是第一次, 难道这不算技术问题啊

出20入186汤圆

发表于 2014-9-7 18:51:14 | 显示全部楼层
楼上来混飞币的啊?

出0入0汤圆

 楼主| 发表于 2014-9-7 18:52:06 | 显示全部楼层
lcofjp 发表于 2014-9-7 18:28
不明白楼主为啥发在飞思卡尔区,我在犹豫要不要举报,同时回复你一下。
反斜杠是续行用的,反斜杠下一行的 ...

多谢你的解疑, 初次遇到 宏定义 与 续行符号的结合用法,飞思单片机也有C 宏定义的吧,这也算水,如果人人都会的话,就不用发帖了

出0入8汤圆

发表于 2014-9-7 18:53:13 | 显示全部楼层
taojie 发表于 2014-9-7 18:45
但是去掉 反斜杠, 编译就是不通过,加了{},并不是原来程序要的结果, 不懂就问,难道 飞思不用 C语言的 ...

去掉反斜杠,内容要放在同一行的

出0入0汤圆

发表于 2014-9-7 18:53:20 | 显示全部楼层
建议好好学学C和指针,当然不必花时间去看完一本书,要勤翻书,这是个人想法啊。还有论坛了就有好多C语言的书籍

出0入0汤圆

 楼主| 发表于 2014-9-7 19:00:42 | 显示全部楼层
xujihu 发表于 2014-9-7 18:53
去掉反斜杠,内容要放在同一行的

嗯,说得对,要放在同一行的,编译就通过了, 但是阅读起来不太 清晰的,宏定义就清晰了,要不好容易 两者分离理解了,多谢!
#define ON  0
#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

出0入0汤圆

发表于 2014-9-7 19:02:34 | 显示全部楼层
宏定义里面 隔行连续

出0入4汤圆

发表于 2014-9-7 19:03:10 | 显示全部楼层
taojie 发表于 2014-9-7 18:48
如果大家的编程水平都是顶呱呱的,还有必要过来论坛学习啊,  续行符这个,结合在宏定义的时候,就是第一 ...


不要那么激动好吗?  
续行符接续符都是同一个意思,不同书籍翻译不同文字而已。你明白怎么用就行。C 语言里以反斜杠(\)表示续行。编译器会将反斜杠剔除掉,跟在反斜杠后面的字符自动接续到前一行。但是注意:反斜杠之后不能有空格。

出0入0汤圆

 楼主| 发表于 2014-9-7 19:19:14 | 显示全部楼层
oner 发表于 2014-9-7 19:03
不要那么激动好吗?  
续行符接续符都是同一个意思,不同书籍翻译不同文字而已。你明白怎么用就行。C 语 ...

但是注意:反斜杠之后不能有空格。

多谢,问题解决!

出100入101汤圆

发表于 2014-9-7 19:40:57 | 显示全部楼层
ls各位的讨论,把这个“知识点”讲清楚了。

出0入0汤圆

发表于 2014-9-7 19:46:57 | 显示全部楼层
以前经常以库的头文件里看到,不知怎么回事,楼上几位给解释清楚了

出130入129汤圆

发表于 2014-9-7 19:55:07 | 显示全部楼层
不知道这个很正常的事情,C语言里面宏的各种法还是很多的,所以不知道时候去查下就足够了。

出0入0汤圆

发表于 2014-9-7 20:02:19 来自手机 | 显示全部楼层
我理解是续行

出0入0汤圆

发表于 2014-9-7 20:12:41 | 显示全部楼层
宏定义好像必须放同一行,实在没办法就用续行符,加括号肯定不行,那是在函数里的做法

出0入0汤圆

发表于 2014-9-7 20:31:22 来自手机 | 显示全部楼层
大家能把这些特殊用法做一个总结贴么,貌似还有三个井号或者三个点的用法

出0入0汤圆

发表于 2014-9-7 20:38:53 | 显示全部楼层
毫无疑问,续行符

出0入0汤圆

发表于 2014-9-7 20:40:19 | 显示全部楼层
这是连接符    C语言里面有讲到

出0入0汤圆

发表于 2014-9-7 20:43:32 | 显示全部楼层
连接符,增强了可读性!

出0入0汤圆

发表于 2014-9-7 20:45:54 | 显示全部楼层
隔行继续   类似英文中的 -

出0入0汤圆

发表于 2014-9-7 20:55:39 | 显示全部楼层
换行!!!

出0入0汤圆

 楼主| 发表于 2014-9-7 20:58:13 | 显示全部楼层
剑舞 发表于 2014-9-7 20:12
宏定义好像必须放同一行,实在没办法就用续行符,加括号肯定不行,那是在函数里的做法 ...

你说得对, 宏定义必须放同一行,中秋快乐!

出0入0汤圆

发表于 2014-9-7 21:00:15 | 显示全部楼层
中秋快乐

出0入93汤圆

发表于 2014-9-7 21:04:59 | 显示全部楼层
根据楼主的问题,再一次体会了“飞思卡尔是个筐,什么都敢往里装”技术理论

出0入0汤圆

 楼主| 发表于 2014-9-7 21:05:56 | 显示全部楼层
68336016 发表于 2014-9-7 19:55
不知道这个很正常的事情,C语言里面宏的各种法还是很多的,所以不知道时候去查下就足够了。 ...

多谢体谅,这个我实在不懂就提出来问的,解决一个问题就少一个路障,中秋快乐!

出0入0汤圆

 楼主| 发表于 2014-9-7 21:07:23 | 显示全部楼层
tim 发表于 2014-9-7 21:04
根据楼主的问题,再一次体会了“飞思卡尔是个筐,什么都敢往里装”技术理论 ...

本来这个程序就是我打算移植过来 K20板子运行的

出0入93汤圆

发表于 2014-9-7 21:09:35 | 显示全部楼层
taojie 发表于 2014-9-7 21:07
本来这个程序就是我打算移植过来 K20板子运行的

不用解释啦,别人也不傻。。。

出0入0汤圆

 楼主| 发表于 2014-9-7 21:11:01 | 显示全部楼层
zzj0329 发表于 2014-9-7 20:31
大家能把这些特殊用法做一个总结贴么,貌似还有三个井号或者三个点的用法 ...

本想看这两日假期有空不回家,移植一个例子到飞思K20板子的,其中还遇到两个C语法问题,觉得挺精巧的,还是不提出来好了,自行消化就好了,免得有人有意见的

出0入0汤圆

发表于 2014-9-7 21:21:14 来自手机 | 显示全部楼层
这问题到Google 上搜了吗,这里问快还是搜索的快

出0入93汤圆

发表于 2014-9-7 21:24:07 | 显示全部楼层
zzj0329 发表于 2014-9-7 20:31
大家能把这些特殊用法做一个总结贴么,貌似还有三个井号或者三个点的用法 ...

三个#号?没有见过。一个#表示生成字符串,#@表示生成字符,##表示连接,###这是栅栏,防止小猪跑出来
...在最初的C语言中表示函数的可变参数,后来有了C++,用作捕获所有异常,后来有了C99,在宏定义中定义可以表示可变参数
四个点那是::,C++中太常见了

C/C++中特别变态的转义字符??,估计绝大多数人没有见过,搞不好在字符串操作中会吃亏的。
这里列出一些:比如这样:int i = ??-1;可以编译通过,strlen("??!")等于1。
     ??=       #
     ??/       \
     ??'       ^
     ??(       [
     ??)       ]
     ??!       |
     ??<       {
     ??>       }
     ??-       ~

出0入0汤圆

发表于 2014-9-7 22:01:57 | 显示全部楼层
taojie 发表于 2014-9-7 20:58
你说得对, 宏定义必须放同一行,中秋快乐!

同乐,开源快乐,共享开心,让我们把阿莫的开源共享精神进行到底

出0入0汤圆

发表于 2014-9-7 22:10:16 | 显示全部楼层
C语言接续符\

出0入0汤圆

发表于 2014-9-7 22:13:46 | 显示全部楼层
taojie 发表于 2014-9-7 18:45
但是去掉 反斜杠, 编译就是不通过,加了{},并不是原来程序要的结果, 不懂就问,难道 飞思不用 C语言的 ...

宏定义不用反斜杠 那就不是一行代码,必然编译不过。。

出0入0汤圆

发表于 2014-9-7 22:57:44 | 显示全部楼层
很少用,一遍尽量放在一行里面,以便于阅读。

出0入0汤圆

发表于 2014-9-8 08:46:53 | 显示全部楼层
lcofjp 发表于 2014-9-7 18:28
不明白楼主为啥发在飞思卡尔区,我在犹豫要不要举报,同时回复你一下。
反斜杠是续行用的,反斜杠下一行的 ...

以前只知道\后面接转义字符,现在又知道了还有续行作用 我的C也没学好啊!

出0入0汤圆

发表于 2014-9-8 09:12:22 | 显示全部楼层
sunrundong 发表于 2014-9-8 08:46
以前只知道\后面接转义字符,现在又知道了还有续行作用 我的C也没学好啊! ...


没学好去看看LZ发的另一个贴子,学完这些你还不知道反谢扛是什么,打PP

C语言的好资料
http://www.amobbs.com/thread-5594840-1-1.html
(出处: amoBBS 阿莫电子论坛)

出50入0汤圆

发表于 2014-9-8 09:26:31 | 显示全部楼层
mark  学习了

出0入0汤圆

发表于 2014-9-8 09:32:14 | 显示全部楼层
就是续行符,起到链接下一行的作用,续行符后面不能加注释的,加注释就编译不过

出0入0汤圆

发表于 2014-9-8 09:36:36 | 显示全部楼层
续航符,不懂就问,没什么丢脸的,露珠做得对

出0入0汤圆

发表于 2014-9-8 09:41:57 | 显示全部楼层
oner 发表于 2014-9-7 19:03
不要那么激动好吗?  
续行符接续符都是同一个意思,不同书籍翻译不同文字而已。你明白怎么用就行。C 语 ...

对于C语言的续行符还是真没有用过。
在续行符后边不能有空格,但是是可以回车的吧?
续行符前边是可以有空格的吧?

出0入0汤圆

发表于 2014-9-8 09:44:30 | 显示全部楼层
剑舞 发表于 2014-9-7 20:12
宏定义好像必须放同一行,实在没办法就用续行符,加括号肯定不行,那是在函数里的做法 ...

这个不是吧,这个要根据实际情况看,有时候短短的几句,换行了也可以增加可读性的

比如这个
#define TCP_REG(pcbs, npcb)                        \
  do {                                             \
    npcb->next = *pcbs;                            \
    *(pcbs) = npcb;                                \
    tcp_timer_needed();                            \
  } while (0)

出0入0汤圆

发表于 2014-9-8 09:49:21 | 显示全部楼层
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的源码,我第一看到这段,差点就疯掉

出0入0汤圆

发表于 2014-9-8 10:06:25 | 显示全部楼层
连接符 续行符的意思  ,当一行写不下的时候

出0入0汤圆

发表于 2014-9-8 10:12:52 | 显示全部楼层
wxfje 发表于 2014-9-8 09:44
这个不是吧,这个要根据实际情况看,有时候短短的几句,换行了也可以增加可读性的

比如这个

麻烦你看清楚再发表议论行不行?后面的话看见了没,实在没办法可以用续行符,你那个做法不就是在用续行符,懂得不要断章取义,不懂要谦虚,不要乱发表意见,会让人笑掉大牙的

出0入0汤圆

发表于 2014-9-8 10:21:16 | 显示全部楼层
剑舞 发表于 2014-9-8 10:12
麻烦你看清楚再发表议论行不行?后面的话看见了没,实在没办法可以用续行符,你那个做法不就是在用续行符 ...

问题在于什么叫实在没办法,一行里面有100列叫实在没办法,还是一行有1000列叫实在没办法
我发表议论没错,我只是发表我个人的见解,我个人的理解,我没有针对您,也没有针对任何人,
如果我错了,我会改,在此给您道歉了,对不起哥们

出0入0汤圆

发表于 2014-9-8 10:34:10 | 显示全部楼层
wxfje 发表于 2014-9-8 09:49
没有什么必须不必须的,就比如下面这个,你认为有错吗

/** This is the actual memory used by the pool ...

能解释一下这段程序吗?看不懂啊

出0入4汤圆

发表于 2014-9-8 12:02:43 来自手机 | 显示全部楼层
PCBBOY1991 发表于 2014-9-8 09:41
对于C语言的续行符还是真没有用过。
在续行符后边不能有空格,但是是可以回车的吧?
续行符前边是可以有 ...

你的理解是正确的。

出0入0汤圆

发表于 2014-9-8 12:18:49 来自手机 | 显示全部楼层
oner 发表于 2014-9-8 12:02
你的理解是正确的。

后面卜但不能没空格,还不能有任何东西包括注释

出0入0汤圆

发表于 2014-9-8 12:36:58 | 显示全部楼层
不懂就问,没啥事情,反正会有大神帮你解答的...........

出0入0汤圆

发表于 2014-9-8 20:55:47 | 显示全部楼层
楼上已经有正确答案了,续航用

出0入0汤圆

发表于 2014-9-8 21:09:40 | 显示全部楼层
看代码就猜出来

出0入0汤圆

发表于 2014-9-9 08:12:40 | 显示全部楼层
holts2 发表于 2014-9-8 09:12
没学好去看看LZ发的另一个贴子,学完这些你还不知道反谢扛是什么,打PP

C语言的好资料

好的,得加紧学习了!

出0入0汤圆

发表于 2014-9-9 09:05:24 | 显示全部楼层
续行用的,楼上的已经表述很清楚了,这里就不重复叙述了,这个就是为了程序观看起来直观易懂,其实你把所有内容放在一行里面也是可以的,但是看起来就没那么爽了

出0入0汤圆

发表于 2014-9-9 09:19:02 | 显示全部楼层
这个明显来抓收入的,随便一搜就能找到!

出0入0汤圆

发表于 2014-9-9 09:56:16 | 显示全部楼层
这不应算水贴,任何知识有深有浅,不能说浅的知识就是水吧,经大家讨论,也可以帮助更多的坛友。对老师们也是温故知新麻。

出0入0汤圆

发表于 2014-9-9 10:33:40 | 显示全部楼层
换行“\”

出0入0汤圆

发表于 2014-9-9 10:47:01 | 显示全部楼层
我觉得这个发到其它区就不算水贴,发到飞思卡尔区就应该算水帖。
头像被屏蔽

出0入0汤圆

发表于 2014-9-9 10:52:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2014-9-9 10:59:48 | 显示全部楼层
额,基础不扎实啊

出0入0汤圆

发表于 2014-9-9 11:53:33 | 显示全部楼层
学习了,之前看到也不明觉厉,很多知识新手书上不一定看得到,有人点拨下是最好的

出0入0汤圆

发表于 2014-9-9 12:08:03 | 显示全部楼层
涨姿势了

出0入0汤圆

发表于 2014-9-9 12:30:35 | 显示全部楼层
断行用的啊

出0入0汤圆

发表于 2014-9-9 12:33:06 | 显示全部楼层
涨姿势了

出0入0汤圆

发表于 2014-9-9 19:33:34 | 显示全部楼层
第一是在野火的程序上看到的,是续航的作用

出0入0汤圆

发表于 2014-9-9 19:39:24 | 显示全部楼层
有时为了看着整齐,代码中可以用括号,运算符等进行换行。
但在宏里面,没有代码中自由,而且用宏就要写明意思,所以有的宏会很长,这时不得不由续行符出现了。

出0入0汤圆

发表于 2014-9-9 20:38:13 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2014-9-9 21:14:47 | 显示全部楼层
mark            

出0入0汤圆

发表于 2014-9-9 21:42:36 | 显示全部楼层
newbie 发表于 2014-9-9 10:52
你这个是不同情况
这个本质是一个数组

我只是想说明C的用法太多,有时候很难判断

出0入0汤圆

发表于 2014-9-9 23:52:54 | 显示全部楼层
续行符,其实可以一行写完的,但层次好看就用续行符。

出0入0汤圆

发表于 2014-9-10 00:01:45 | 显示全部楼层
野火的STM32教程里面LED设置就用的这个,你这个程序有可能源自野火程序,野火教程也对这一点有说明

出0入0汤圆

发表于 2014-9-10 10:49:53 | 显示全部楼层
续行符,编译器会自动删掉,变成一行

出0入8汤圆

发表于 2014-9-10 10:57:28 | 显示全部楼层
这个应该是续行符吧      不过有的编译器貌似不加也可以续行的

出0入0汤圆

发表于 2014-9-10 11:10:32 | 显示全部楼层
换行,这两行就相当于写在一行里

出0入0汤圆

发表于 2014-9-10 14:30:32 | 显示全部楼层
续行符,我也是一年前才知道的

出0入0汤圆

发表于 2014-9-14 10:17:22 | 显示全部楼层
平常写的程序都不大,还真不知道这个用法,这回学习了。

出0入0汤圆

发表于 2014-9-14 12:40:12 来自手机 | 显示全部楼层
反斜杠是续航付,只是平时少用。

出0入0汤圆

发表于 2014-9-14 12:55:28 | 显示全部楼层
野火的库吧,续行作用

出0入0汤圆

发表于 2014-9-14 13:03:13 | 显示全部楼层
wxfje 发表于 2014-9-9 21:42
我只是想说明C的用法太多,有时候很难判断

这就看你的C语言基础是否扎实了。许多都是很基础的东西。

出0入0汤圆

发表于 2014-9-14 15:45:09 | 显示全部楼层
这是从续航符,野火的教程中讲的很清楚啊

出0入0汤圆

发表于 2014-9-15 19:34:41 | 显示全部楼层
这个不是STM32的么,貌似还是野火的

出0入0汤圆

发表于 2014-9-16 11:01:26 | 显示全部楼层
反斜杠是续行符吧,表示连接下一行的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-9 17:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表