宏可以作为函数名???

baoyuan2013 2012-12-31 09:32:48

D:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\atox.c

#include <cruntime.h>
#include <mtdll.h>
#include <stdlib.h>
#include <ctype.h>
#include <mbctype.h>
#include <tchar.h>
#include <setlocal.h>
#ifdef _MBCS
#undef _MBCS
#endif /* _MBCS */
#include <tchar.h>

int __cdecl _tstoi(
const _TCHAR *nptr
)
{
return (int)_tstol(nptr);
}


宏做为函数名??



tchar.h 里已经有了一个宏: _tstoi
...全文
335 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimette 2012-12-31
  • 打赏
  • 举报
回复
和函数类似,还是有区别的
图灵狗 2012-12-31
  • 打赏
  • 举报
回复
语法上应该没有问题,我的理解是当存在宏的时候,会优先调用宏,不存在的时候才会调用函数,它们的功能是一致的,感觉函数在此是作为后备的用途。
引用 8 楼 baoyuan2013 的回复:
D:\Program Files\Microsoft Visual Studio 9.0\VC\include\tchar.h #define _tstoi atoi D:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdlib.h _Check_return_ _CRTIMP _CRT_JIT_INTRINS……
zhuyf87 2012-12-31
  • 打赏
  • 举报
回复
我觉得,宏名可以作为函数名。 作为函数名,宏也仅仅是一个替换。 int __cdecl _tstoi( const _TCHAR *nptr ) { return (int)_tstol(nptr); } 因为在tchar.h里面,_tstoi被定义为一个宏定义(atoi或者wtoi) 那预处理器,在对程序进行预处理时,就把_tstoi替换为atoi。 这和普通的宏替换,没什么区别。
baoyuan2013 2012-12-31
  • 打赏
  • 举报
回复
D:\Program Files\Microsoft Visual Studio 9.0\VC\include\tchar.h #define _tstoi atoi D:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdlib.h _Check_return_ _CRTIMP _CRT_JIT_INTRINSIC int __cdecl atoi(_In_z_ const char *_Str); atoi才是函数 D:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\atox.c int __cdecl _tstoi( const _TCHAR *nptr ) { return (int)_tstol(nptr); } 其中 atox.c包含了tchar.h #include <tchar.h>
图灵狗 2012-12-31
  • 打赏
  • 举报
回复
你把宏定义的那段代码贴一下。
引用 6 楼 baoyuan2013 的回复:
引用 5 楼 turingo 的回复:那你到底是要问什么问题呢? 引用 4 楼 baoyuan2013 的回复:引用 3 楼 turingo 的回复:那你编译的时候有没有出现重复定义的错误?如果没有的话,那么说明两个_tstoi中间一定被宏选择编译了,其中有一个没有被编译到,这样不会有问题的。 引用 2 楼 baoyuan2013 的回复:宏只是一种替换,看成……
baoyuan2013 2012-12-31
  • 打赏
  • 举报
回复
引用 5 楼 turingo 的回复:
那你到底是要问什么问题呢? 引用 4 楼 baoyuan2013 的回复:引用 3 楼 turingo 的回复:那你编译的时候有没有出现重复定义的错误?如果没有的话,那么说明两个_tstoi中间一定被宏选择编译了,其中有一个没有被编译到,这样不会有问题的。 引用 2 楼 baoyuan2013 的回复:宏只是一种替换,看成替换就行了,不要想得太多 那么 ……
我想问:从语法角度看,宏是否可以作为函数名?(指的是:申明,定义函数的时候,函数名是一个宏) 似乎不能吧, 可是微软的代码却是这样写的。
图灵狗 2012-12-31
  • 打赏
  • 举报
回复
那你到底是要问什么问题呢?
引用 4 楼 baoyuan2013 的回复:
引用 3 楼 turingo 的回复:那你编译的时候有没有出现重复定义的错误?如果没有的话,那么说明两个_tstoi中间一定被宏选择编译了,其中有一个没有被编译到,这样不会有问题的。 引用 2 楼 baoyuan2013 的回复:宏只是一种替换,看成替换就行了,不要想得太多 那么 有个函数叫: int __cdecl _tstoi( ……
baoyuan2013 2012-12-31
  • 打赏
  • 举报
回复
引用 3 楼 turingo 的回复:
那你编译的时候有没有出现重复定义的错误?如果没有的话,那么说明两个_tstoi中间一定被宏选择编译了,其中有一个没有被编译到,这样不会有问题的。 引用 2 楼 baoyuan2013 的回复:宏只是一种替换,看成替换就行了,不要想得太多 那么 有个函数叫: int __cdecl _tstoi( const _TCHAR *nptr……
看帖不仔细,这代码明显是微软的
图灵狗 2012-12-31
  • 打赏
  • 举报
回复
那你编译的时候有没有出现重复定义的错误?如果没有的话,那么说明两个_tstoi中间一定被宏选择编译了,其中有一个没有被编译到,这样不会有问题的。
引用 2 楼 baoyuan2013 的回复:
宏只是一种替换,看成替换就行了,不要想得太多 那么 有个函数叫: int __cdecl _tstoi( const _TCHAR *nptr ) { return (int)_tstol(nptr); }
baoyuan2013 2012-12-31
  • 打赏
  • 举报
回复
宏只是一种替换,看成替换就行了,不要想得太多 那么 有个函数叫: int __cdecl _tstoi( const _TCHAR *nptr ) { return (int)_tstol(nptr); }
pengfoo 2012-12-31
  • 打赏
  • 举报
回复
宏只是一种替换,看成替换就行了,不要想得太多

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧