发新帖我要提问
12
返回列表
打印

C语言的小题目(把项目的编译日期存储在CONST里),请教解答:

[复制链接]
楼主: mcuisp
手机看帖
扫描二维码
随时随地手机跟帖
21
原野之狼| | 2011-6-14 11:01 | 只看该作者 回帖奖励 |倒序浏览
LS的我试了可行,可惜已经结贴了:)
""的用法不知出于何处,居然如此奇妙(可以连接2个字符串),呵呵。
mcuisp 发表于 2011-6-14 10:35

连接字符串的并不是“”符号 此处是为了通过一个空的字串来分隔开两个字符串宏
要不然__DATE____TIME__就不知道是啥东西了
实际上连接字串不需要任何东西  紧挨着就行了 比如
“string1”"string2"“string3”

使用特权

评论回复
22
mcuisp|  楼主 | 2011-6-14 11:05 | 只看该作者
本帖最后由 mcuisp 于 2011-6-14 11:07 编辑

从14楼来理解13楼的""用法:
这个""是在__DATE__和__TIME__之间插入一个空字符串。以避免__DATE____TIME__无法被识别。
我在IAR里试了下,__DATE__ __TIME__       (插入一个空格也是可行的)。

8楼也很精妙,呵呵。

这块砖抛得值呀、、、

使用特权

评论回复
23
原野之狼| | 2011-6-14 11:12 | 只看该作者
连接字符串的并不是“”符号 此处是为了通过一个空的字串来分隔开两个字符串宏
要不然__DATE____TIME__就不知道是啥东西了
实际上连接字串不需要任何东西  紧挨着就行了 比如
“string1”"string2"“string3” ...
原野之狼 发表于 2011-6-14 11:01

修改下 不用紧挨着  有空格或者TAB都行  当然常用的做法还会使用换行连接符号\
以使排版清晰
例如
const char ver_info[] = {\
       "cnlaunch"  \
       "shenzhen.zhongguo"  \
       "2011.06.14"   \
}

使用特权

评论回复
24
leang521| | 2011-6-14 12:29 | 只看该作者
本帖最后由 leang521 于 2011-6-14 12:32 编辑
13楼的我试了可行,可惜已经结贴了:)
""的用法不知出于何处,居然如此奇妙(可以连接2个预定义的字符串),呵呵。
14楼的也可行。

万能的21ic,呵呵
mcuisp 发表于 2011-6-14 10:35

" "就是一个空格而已。。。。。。
14楼和我的是一样的,""在C里代表字符串。
这里面引用了宏定义,所以要站在编译器的角度去考虑问题,不能直接使用,因为编译器可能会将之理解为字符串而不是宏

使用特权

评论回复
25
leang521| | 2011-6-14 12:33 | 只看该作者
修改下 不用紧挨着  有空格或者TAB都行  当然常用的做法还会使用换行连接符号\
以使排版清晰
例如
const char ver_info[] = {\
       "cnlaunch"  \
       "shenzhen.zhongguo"  \
       "2011.06.14"   \
} ...
原野之狼 发表于 2011-6-14 11:12

各有所取吧,有些人认为这样清晰些,有些人认为那样清晰些,关键在于编译器怎么理解,是不?

使用特权

评论回复
26
dodome521| | 2011-6-14 14:15 | 只看该作者
不错,长见识了。

使用特权

评论回复
27
linqing171| | 2011-6-14 14:47 | 只看该作者
哈哈,俺的所有代码里都有用这两个宏,包括上位机的,为了好追溯。
所有编译器下都好用。

另外,对于keil C51 的code(也就是const)的绝对地址定位并赋值初始值,有办法的。
在startup.s 中,加入org xxx 然后db, 后只是多加了个2。

另外,对于C++标准的字符串自动连接功能

使用特权

评论回复
28
linqing171| | 2011-6-14 14:49 | 只看该作者
刚说错了,不是startup.s是startup.a51, keil for arm可以初始化带地址的常量,可是for 51的一直不支持,而且将来也不会支持。对于inline等优化也永远不会改进了。

使用特权

评论回复
29
fskjhm| | 2011-6-14 15:34 | 只看该作者
记下,以后看

使用特权

评论回复
30
Ryanhsiung| | 2011-6-18 11:00 | 只看该作者
学习了

使用特权

评论回复
31
leang521| | 2011-6-20 09:11 | 只看该作者
刚说错了,不是startup.s是startup.a51, keil for arm可以初始化带地址的常量,可是for 51的一直不支持,而且将来也不会支持。对于inline等优化也永远不会改进了。 ...
linqing171 发表于 2011-6-14 14:49

不知你说的地址是那个地址,C51不支持文件夹地址,不过支持显示文件名,日期时间等。

使用特权

评论回复
32
lau1860| | 2015-6-2 15:08 | 只看该作者
hgjinwei 发表于 2011-6-13 20:01
曾今在IAR中这样用过:

    STR_TO_BCD在哪里定义的?
和 STRM_TO_BCD有什么区别?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则