问,下面这段代码有没有编译器警告,代码有没有问题,输出结果是多少? 求解答。。。
#include<stdio.h>
struct Info
{
bool a;
double b;
};
void getInfoList( vector<Info> & infoList)
{
Info info;
info.a = true;
infoList.push_back(info);
}
int main()
{
vector<Info> infoList;
getInfoList( infoList);
for (vector<Info>::iterator It = infoList.begin(); It != infoList.end(); It++)
{
printf("%f",(*It).b);
}
return 0;
}
1
loading 2016-09-06 19:37:40 +08:00 via Android
呵呵,真当这里的朋友不是人?
|
2
dtfm 2016-09-06 19:38:50 +08:00 1
来,看几行 c++代码
问,下面这段代码有没有编译器警告 答,滚犊子 |
3
Lonely 2016-09-06 19:53:41 +08:00 via Android
1 楼说得好
|
4
klaus6d 2016-09-06 20:01:35 +08:00 via Android
三楼说的好
|
5
visionsmile 2016-09-06 20:02:11 +08:00
四楼说的好。
|
6
hellov22ex 2016-09-06 20:02:46 +08:00
特地打开了个试了下, return 的是 0 。
|
7
imgalaxy 2016-09-06 20:10:12 +08:00
|
8
jccg90 OP @imgalaxy 哈,要是编译器直接能看出来对错,我还费劲发帖子干嘛。。。感觉像是使用了未初始化的内存,但是试了几个编译器都没有问题。。。所以才来问问
|
9
bazingaterry 2016-09-06 20:19:02 +08:00
@jccg90 访问未初始化的内存并不会有警告,编译器根本不知道……
|
10
jzy 2016-09-06 20:19:18 +08:00 via iPhone
使用未初始化的变量难道语法上有错吗?为什么编译器要告诉你错?
|
11
sgissb1 2016-09-06 20:41:07 +08:00
LZ 不要胡说好吗?
用了 stl 的 vector ,居然连 using namespace std;这个申明都不要吗? 还有你只 #include<stdio.h> 是什么意思? 你到底有没有在编译器里面跑过?要不你说说你在什么编译器里面跑过 |
12
zhongkaixin 2016-09-06 20:46:40 +08:00
现在某些 90 后,连最基本的礼貌都不懂了
|
13
jmc891205 2016-09-06 21:06:56 +08:00
b 的值是由 Info 的默认构造函数初始化的 并不是未初始化。
至于它初始化用的是 0.0 还是用一个随机值 不同的编译器有不同的实现。 |
14
KingHL 2016-09-06 21:13:39 +08:00
vector 中的 info 对象是在存在在 getInfoList 这个函数的调用栈上的,碰巧能打印出来是因为栈空间还没有被覆盖,不知道是不是我说的这样, c++好久没用了。
|
15
KingHL 2016-09-06 21:15:37 +08:00
另外,楼主的这种提问方式,也是醉了,最起码你把程序写对了吧。
|
17
chai2010 2016-09-06 21:18:43 +08:00 via iPhone
printf %d ,还是先把 C 语言弄清楚吧
|
19
jmc891205 2016-09-06 21:24:47 +08:00
@yangff 是啊 copy 的时候调用默认拷贝构造函数 copy 之后的值还是等于 Info info 时默认构造函数用来初始化 b 的值
|
21
bp0 2016-09-06 21:48:44 +08:00
好混搭的代码。
|
22
qua 2016-09-06 21:54:15 +08:00 via iPhone
info.b 没初始化啊
|
23
qua 2016-09-06 21:55:32 +08:00 via iPhone
这么简单的问题有什么好讨论的
|
24
owt5008137 2016-09-06 22:41:34 +08:00 via Android
有没有 warning 取决于你的编译选项,如果开全了 warning 的话会有 warning
另外,一定会编译 error ,原因如 @sgissb1 所说。虽然可以默认包含某些头文件,但是我所知的任何一个环境都不会自动 #include<vector> 最后问输出什么?这取决于你的编译器、编译选项、 runtime 库,还有硬件环境。所以你问会输出什么?鬼知道 |
25
kingddc314 2016-09-06 23:17:30 +08:00
局部变量的默认初始化具有不确定性,虽然这里打印是 0.0 ,但是后面再加上一个 int c; 成员后,打印的 b 却变成了随机值,应该是看编译器实现。所以不能依赖局部变量默认构造函数。全局变量的默认初始化则是零值了。
另外实在没编译器也可以试试在线编译器,如 http://webcompiler.cloudapp.net/ |
26
veelog 2016-09-06 23:20:49 +08:00 via Android
不知道这几行代码有什么意思。。。。
|
28
josephshen 2016-09-07 00:38:41 +08:00 via iPhone
有些人不光是不会啊而且是胡说啊,回国之后 v 站水平下降不少啊
|
29
azh7138m 2016-09-07 00:54:51 +08:00
```
/tmp/480407296/main.cpp:9:6: error: variable has incomplete type 'void' void getInfoList( vector<Info> & infoList) ^ /tmp/480407296/main.cpp:9:19: error: use of undeclared identifier 'vector' void getInfoList( vector<Info> & infoList) ^ /tmp/480407296/main.cpp:9:26: error: 'Info' does not refer to a value void getInfoList( vector<Info> & infoList) ^ /tmp/480407296/main.cpp:3:8: note: declared here struct Info ^ /tmp/480407296/main.cpp:9:34: error: use of undeclared identifier 'infoList' void getInfoList( vector<Info> & infoList) ^ /tmp/480407296/main.cpp:9:43: error: expected ';' after top level declarator void getInfoList( vector<Info> & infoList) ^ ; 5 errors generated. ``` https://glot.io/snippets/ei75xmvvui 楼主你开心就好:) |
30
htfy96 2016-09-07 07:19:11 +08:00 via Android
其实 include stdio.h 就可以给你报编译错误…
|
31
LigeLaige 2016-09-07 08:24:41 +08:00
难道不需要 #include <vector> 吗?
|
33
lzhCoooder 2016-09-07 09:50:59 +08:00
GCC 打开 -wall 试试
|
34
FifiLyu 2016-09-07 10:08:53 +08:00
|
35
jmc891205 2016-09-07 10:30:46 +08:00
@zby0826 现在程序员都不从 C/C++开始入门啦 都是从 Python 、 JavaScript 开始学 不懂这些东西也正常
|
36
araraloren 2016-09-07 11:05:47 +08:00
@jmc891205 楼主问问题的态度不怎么好吧。。
至少该说说自己到底是怎么搞的,遇到了什么问题。。 |
37
hitmanx 2016-09-07 13:38:53 +08:00
|
38
BlackKey 2016-09-07 16:15:43 +08:00
编译器没有义务去警告未定义行为
|
39
phttc 2016-09-07 17:02:36 +08:00
C++ 输出难道不是 cout 么。。。到底要看 C 还是 C ++
|
40
missdeer 2016-09-07 17:16:22 +08:00
作为 C++代码,第一行就没写好
|
41
zwindl 2016-09-07 19:44:36 +08:00
来,吃点便便补补脑子。
1. 不包含 <vector> 就使用 vector 2. 没有使用 std ,就直接写 vector 3. 你应该把编译环境说一下 |
42
mozartgho 2016-09-08 10:31:59 +08:00
我终于知道混 V 站的都是些什么人了!
|