C++ 面试问题

zhu793150 2008-04-29 01:59:57
1.宏定义的内容是在编译其它文件的时候被处理的呢?还是程序运行的时候被替换?还是?
2.在一个CPP文件里,全局变量的作用域是在整个文件有效呢?还是在变量申明的地方之后有效呢?
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwong 2008-05-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 FORTUNATE99 的回复:]
1.编译的时候被替换掉
2.申明之后有效
[/Quote]同意。

1.未经过编译的代码只是一系列无意义的字符串,所有代码只有经过编译才会生效。

2.编译器无法”猜测“你的意图,无法解析未知的东西,所以所有的变量、函数、实例、对象,只有在显式地声明后,才能生效。
meiZiNick 2008-04-30
  • 打赏
  • 举报
回复
接分是王道!
  • 打赏
  • 举报
回复
1.宏定义的内容是在编译其它文件的时候被处理的呢?还是程序运行的时候被替换?还是?
编译前

2.在一个CPP文件里,全局变量的作用域是在整个文件有效呢?还是在变量申明的地方之后有效呢?

整个工程,比文件作用域还大.
qmm161 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fallening 的回复:]
引用楼主 zhu793150 的帖子:
1.宏定义的内容是在编译其它文件的时候被处理的呢?还是程序运行的时候被替换?还是?
2.在一个CPP文件里,全局变量的作用域是在整个文件有效呢?还是在变量申明的地方之后有效呢?

1.编译的时候被替换掉
2.这个看你怎么写的,比如

C/C++ code
//1.cc
extern const int f;

int foo()
{
return f*f;
}

//2.cc
const int f = 1;



这里即使先编译1.cc 然后再编译2.cc,但是…
[/Quote]
extern 也是声明,所以还是声明后有效!
ribut9225 2008-04-29
  • 打赏
  • 举报
回复
楼上们的正解
wbczyh 2008-04-29
  • 打赏
  • 举报
回复
1.宏在预处理时被替换掉;
2.全局变量在整个程序生命周期内有效,静态变量仅在文件内有效;宏定义在声明后才有效。
fallening 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhu793150 的帖子:]
1.宏定义的内容是在编译其它文件的时候被处理的呢?还是程序运行的时候被替换?还是?
2.在一个CPP文件里,全局变量的作用域是在整个文件有效呢?还是在变量申明的地方之后有效呢?
[/Quote]
1.编译的时候被替换掉
2.这个看你怎么写的,比如

//1.cc
extern const int f;

int foo()
{
return f*f;
}

//2.cc
const int f = 1;

这里即使先编译1.cc 然后再编译2.cc,但是链接了之后,定义在2.cc中的全局变量f同样作用再1.cc中
FORTUNATE99 2008-04-29
  • 打赏
  • 举报
回复
1.编译的时候被替换掉
2.申明之后有效

65,210

社区成员

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

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