分页: 1 / 1
[已解决]VIM使用MSVC编译器,make时如何提示“你输入的某函数未找到”
发表于 : 2012-01-26 22:17
由 fy0
默认无法给出任何程序生成未果的提示。
方法直接跳转5楼
=============================================
啊,先说一下,我目前的编译器是MSVC。
但是make之后呢,发现提示了个没头没脑的(1/23)
这不科学啊!我一度以为是自己的山寨nmake调用程序写错了。
结果编译出waring或error的时候我才明白原来还没弄错。
可是不管怎么说你返回个编译成功或者失败啊,
这样算个怎么个情况……
何况msvc有个蛋疼的地方是编译的时候不检查函数名,无论写什么都能通过。
link时候才提示找不到某某符号,还不给出行号!
加上上面那个问题,这种情况是一个错误提示都没有的。。。
让我情何以堪……
Re: VIM的make配置在哪找?我觉得显示信息过少了。。
发表于 : 2012-01-26 23:45
由 sarrow
说实话,我看楼主的帖子,也感觉有点没头没脑的。
很久没用msvc了。不过,函数的定义是否存在,对于C/C++语言来说,都得拖到连接的时候,问题才会暴露出来吧?
如果是动态调用动态连接库的话,函数的定义是否存在,到连接阶段都不会知道。得到实际运行程序的时候。
不知道我有没有说错?
Re: VIM的make配置在哪找?我觉得显示信息过少了。。
发表于 : 2012-01-27 0:23
由 fy0
sarrow 写了:说实话,我看楼主的帖子,也感觉有点没头没脑的。
很久没用msvc了。不过,函数的定义是否存在,对于C/C++语言来说,都得拖到连接的时候,问题才会暴露出来吧?
如果是动态调用动态连接库的话,函数的定义是否存在,到连接阶段都不会知道。得到实际运行程序的时候。
不知道我有没有说错?
确实,思维有点混乱。。
总之一句话:
Make之后如何确切获知是否成功
既然是到了链接时候才能知道函数是否存在,那么为什么还能提示:实参太多?
说明内部有个函数表。
现在能否做两件事:
1) 让cl直接在编译时弹出错误(找不到函数)
2) 让链接阶段可以弹出错误(我的链接是用cl -o来做的,改变一下能否做到?)
Re: VIM的make配置在哪找?我觉得显示信息过少了。。
发表于 : 2012-01-27 10:29
由 sarrow
既然是到了链接时候才能知道函数是否存在,那么为什么还能提示:实参太多?
感觉楼主基础知识缺缺阿!
函数有“声明”和“定义(实现)”的区分。
对于变量也是一样,有声明,也有定义。
编译时,针对函数调用的错误提示,其实就只是在分析函数的声明部分能不能和调用部分匹配起来。
如果找不到匹配的,就提示“函数没有定义”——至于该函数的实现,具体存在与否,在编译为obj文件这一步,编译器是不会管的!
而整个编译(源代码->obj文件->二进制本地代码(程序)这个动作)完成的时候,函数所谓的调用约定、参数列表这些信息都丢失了。函数就退化为一个地址而已(针对静态连接)。
Re: VIM的make配置在哪找?我觉得显示信息过少了。。
发表于 : 2012-01-27 11:25
由 fy0
sarrow 写了:既然是到了链接时候才能知道函数是否存在,那么为什么还能提示:实参太多?
感觉楼主基础知识缺缺阿!
函数有“声明”和“定义(实现)”的区分。
对于变量也是一样,有声明,也有定义。
编译时,针对函数调用的错误提示,其实就只是在分析函数的声明部分能不能和调用部分匹配起来。
如果找不到匹配的,就提示“函数没有定义”——至于该函数的实现,具体存在与否,在编译为obj文件这一步,编译器是不会管的!
而整个编译(源代码->obj文件->二进制本地代码(程序)这个动作)完成的时候,函数所谓的调用约定、参数列表这些信息都丢失了。函数就退化为一个地址而已(针对静态连接)。
你的意思我明白,但是你误解了我的意思。
你是说编译器是个二杆子,不管函数有没有只管把函数信息写进去,
到了link的时候再去按照信息进行拼装。
但是,既然能够提示“实参太多”(比如strdup(a,b,c)这种明显胡搞的写法),
说明编译器并非完全的不作为(至少正如你说的检查了函数声明)。
vc编译器至少获知了这个函数在现有的头文件(实现时候或许是读取库文件?)中是否存在,但是他没有报!
尽管这是一个正常的编译行为,但是对我的编程造成了影响。
现在寻找的是一种可能性,让编译器将它知道的这段内容告诉我,
或是让链接器返回的错误信息带上行号,以便在quickfix窗口告诉我。
=======================
自己解决了,这个思路果然没错。
mscv编译时候给$(CC)带上/W3选项(/Wall也可)就能提示了,提示为warning
Re: [已解决]VIM使用MSVC编译器,make时如何提示“你输入的某函数未找到”
发表于 : 2012-01-28 21:58
由 sarrow
恭喜。
其实我猜测有工具能办得到,一直在等待某某人回答。没想到你自己解决了。