#define aba 4 之后 abc是什么类型呢?

小魔菇 2010-09-11 03:29:09
请教一下
如果我定义了常量 #define aba 4
abc是什么类型呢?整型?

请指教
...全文
368 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
Frog1228 2011-08-17
  • 打赏
  • 举报
回复
看过。
zmkkobe 2010-09-13
  • 打赏
  • 举报
回复
这个是宏定义的,相当于把abc替换成了4
赵4老师 2010-09-13
  • 打赏
  • 举报
回复
对编译器来说是字符串类型
vipvvv 2010-09-13
  • 打赏
  • 举报
回复
在预编译的时候先将对应的abc替换成4,然后编译器根据默认的类型来识别,例如:这里的4它就认为是int类型,而对于abc是无类型的,这里只能识别4是int类型的。
董小尾 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lcl_data 的回复:]
#define 的东西 ,只是在预编译的时候 进行简单替换

就是把aba 换成4
[/Quote]

没有类型检测,所以是不安全的用法
bobo364 2010-09-13
  • 打赏
  • 举报
回复
预处理的东西,只做一个替换,不为任何类型
tangshan305 2010-09-13
  • 打赏
  • 举报
回复
预处理命令不是C语句,与C语言中语句的语法无关
cattycat 2010-09-13
  • 打赏
  • 举报
回复
宏被替换,如果你问4是什么类型,这个整形常量默认是int的。
yiruirui0507 2010-09-13
  • 打赏
  • 举报
回复
对编译器来说是字符串类型,就是简单的替换操作,无所谓什么类型不类型的.
quanhao8 2010-09-12
  • 打赏
  • 举报
回复
预编译处理完之后 编译器 就当 INT处理了
  • 打赏
  • 举报
回复
无类型。。。所以更多推荐用const取代#define。。。因为#define没有安全检查。。只是简单替换
sky198306 2010-09-12
  • 打赏
  • 举报
回复
这个之前也没有注意,不过既然只是预编译,那么肯定要根据后面的情况来定了
  • 打赏
  • 举报
回复


#define 我感觉有点像一个常量表达式。。。。。。感觉很像。。。。。。。。。不管他定义的什么东西都是被预编译了的,也就是像常量一样 是死的 你改变不了的。。。。。当然这样的问题深究下去没有太大的意义 了解即可! 留更多的时间去学习别的东西吧!
ForestDB 2010-09-12
  • 打赏
  • 举报
回复
没有类型,预处理完了之后abc就看不到了。

注意提问:前面是aba,后面是abc。

既然LZ用GCC,那么何不用gcc -E foo.c或者cpp foo.c看看预处理后的效果呢。

对于int i = 4;这里的4是“字面值”,int类型。
matrixcl 2010-09-12
  • 打赏
  • 举报
回复
4是什么类型,abc就是什么类型
十八道胡同 2010-09-11
  • 打赏
  • 举报
回复
2.5.2 具有可变数目的参数的宏
C++ 编译器接受以下形式的 #define 预处理程序指令。



#define identifier (...) replacement_list
#define identifier (identifier_list, ...) replacement_list


如果列出的宏参数以省略号结尾,那么该宏的调用允许使用除了宏参数以外的其他更多参数。其他参数(包括逗号)收集到一个字符串中,宏替换列表中的名称 __VA_ARGS__ 可以引用该字符串。以下示例说明了如何使用可变参数列表的宏。



#define debug(...) fprintf(stderr, __VA_ARGS__)
#define showlist(...) puts(#__VA_ARGS__)
#define report(test, ...) ((test)?puts(#test):\
printf(__VA_ARGS__))
debug(“Flag”);
debug(“X = %d\n”,x);
showlist(The first, second, and third items.);
report(x>y, “x is %d but y is %d”, x, y);

其结果如下:



fprintf(stderr, “Flag”);
fprintf(stderr, “X = %d\n”, x);
puts(“The first, second, and third items.”);
((x>y)?puts(“x>y”):printf(“x is %d but y is %d”, x, y));
小魔菇 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dingshaofengbinbin 的回复:]

没有类型之说,只是简单的替换,替换完了之后,编译器再识别。。。。。。
[/Quote]
编译器如何识别呢?
根据什么规则来识别?
dingshaofengbinbin 2010-09-11
  • 打赏
  • 举报
回复
没有类型之说,只是简单的替换,替换完了之后,编译器再识别。。。。。。
danfeiwll 2010-09-11
  • 打赏
  • 举报
回复
应该是int型的吧!
加载更多回复(9)

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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