
问,下面这段代码有没有编译器警告,代码有没有问题,输出结果是多少? 求解答。。。
#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 年 9 月 6 日 via Android 呵呵,真当这里的朋友不是人? |
2 dtfm 2016 年 9 月 6 日 来,看几行 c++代码 问,下面这段代码有没有编译器警告 答,滚犊子 |
3 Lonely 2016 年 9 月 6 日 via Android 1 楼说得好 |
4 klaus6d 2016 年 9 月 6 日 via Android 三楼说的好 |
5 visionsmile 2016 年 9 月 6 日 四楼说的好。 |
6 hellov22ex 2016 年 9 月 6 日 特地打开了个试了下, return 的是 0 。 |
7 imgalaxy 2016 年 9 月 6 日 |
8 jccg90 OP @imgalaxy 哈,要是编译器直接能看出来对错,我还费劲发帖子干嘛。。。感觉像是使用了未初始化的内存,但是试了几个编译器都没有问题。。。所以才来问问 |
9 bazingaterry 2016 年 9 月 6 日 @jccg90 访问未初始化的内存并不会有警告,编译器根本不知道…… |
10 jzy 2016 年 9 月 6 日 via iPhone 使用未初始化的变量难道语法上有错吗?为什么编译器要告诉你错? |
11 sgissb1 2016 年 9 月 6 日 LZ 不要胡说好吗? 用了 stl 的 vector ,居然连 using namespace std;这个申明都不要吗? 还有你只 #include<stdio.h> 是什么意思? 你到底有没有在编译器里面跑过?要不你说说你在什么编译器里面跑过 |
12 zhongkaixin 2016 年 9 月 6 日 现在某些 90 后,连最基本的礼貌都不懂了 |
13 jmc891205 2016 年 9 月 6 日 b 的值是由 Info 的默认构造函数初始化的 并不是未初始化。 至于它初始化用的是 0.0 还是用一个随机值 不同的编译器有不同的实现。 |
14 KingHL 2016 年 9 月 6 日 vector 中的 info 对象是在存在在 getInfoList 这个函数的调用栈上的,碰巧能打印出来是因为栈空间还没有被覆盖,不知道是不是我说的这样, c++好久没用了。 |
15 KingHL 2016 年 9 月 6 日 另外,楼主的这种提问方式,也是醉了,最起码你把程序写对了吧。 |
17 chai2010 2016 年 9 月 6 日 via iPhone printf %d ,还是先把 C 语言弄清楚吧 |
21 bp0 2016 年 9 月 6 日 好混搭的代码。 |
22 qua 2016 年 9 月 6 日 via iPhone info.b 没初始化啊 |
23 qua 2016 年 9 月 6 日 via iPhone 这么简单的问题有什么好讨论的 |
24 owt5008137 2016 年 9 月 6 日 via Android 有没有 warning 取决于你的编译选项,如果开全了 warning 的话会有 warning 另外,一定会编译 error ,原因如 @sgissb1 所说。虽然可以默认包含某些头文件,但是我所知的任何一个环境都不会自动 #include<vector> 最后问输出什么?这取决于你的编译器、编译选项、 runtime 库,还有硬件环境。所以你问会输出什么?鬼知道 |
25 kingddc314 2016 年 9 月 6 日 局部变量的默认初始化具有不确定性,虽然这里打印是 0.0 ,但是后面再加上一个 int c; 成员后,打印的 b 却变成了随机值,应该是看编译器实现。所以不能依赖局部变量默认构造函数。全局变量的默认初始化则是零值了。 另外实在没编译器也可以试试在线编译器,如 http://webcompiler.cloudapp.net/ |
26 veelog 2016 年 9 月 6 日 via Android 不知道这几行代码有什么意思。。。。 |
28 josephshen 2016 年 9 月 7 日 via iPhone 有些人不光是不会啊而且是胡说啊,回国之后 v 站水平下降不少啊 |
29 azh7138m 2016 年 9 月 7 日 ``` /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 年 9 月 7 日 via Android 其实 include stdio.h 就可以给你报编译错误… |
31 LigeLaige 2016 年 9 月 7 日 难道不需要 #include <vector> 吗? |
33 lzhCoooder 2016 年 9 月 7 日 GCC 打开 -wall 试试 |
36 araraloren 2016 年 9 月 7 日 @jmc891205 楼主问问题的态度不怎么好吧。。 至少该说说自己到底是怎么搞的,遇到了什么问题。。 |
37 hitmanx 2016 年 9 月 7 日 |
38 BlackKey 2016 年 9 月 7 日 编译器没有义务去警告未定义行为 |
39 phttc 2016 年 9 月 7 日 C++ 输出难道不是 cout 么。。。到底要看 C 还是 C ++ |
40 missdeer 2016 年 9 月 7 日 作为 C++代码,第一行就没写好 |
41 zwindl 2016 年 9 月 7 日 来,吃点便便补补脑子。 1. 不包含 <vector> 就使用 vector 2. 没有使用 std ,就直接写 vector 3. 你应该把编译环境说一下 |
42 mozartgho 2016 年 9 月 8 日 我终于知道混 V 站的都是些什么人了! |