使用atoi时的依赖关系和错误
Dependencies and errors when using atoi
我被赋予重构一个非常老的项目的任务,最近几天我正在检查可执行文件的依赖关系,因为由于某些原因,它们自2009年以来发生了变化,从4传递到14。更具体地说,我的工作是保持2009年之前的依赖关系,但直到今天才对代码进行更改。
我找到了引起问题的指令。它是项目使用的库中的一个函数:chain(str, pps)
char *pps;
char *str;
{
int pp = 0;
pp = atoi(pps);
// ic sunt leones.
如果我注释或替换atoi与一个整数的赋值,如0,1或3,库编译正常,但使用这个。lib的可执行文件给我这些错误:
nafxcw.lib(wincore.obj):错误LNK2001:无法解析的外部符号__imp__InitCommonControls@0nafxcw.lib(wincore.obj):错误LNK2001:无法解析的外部符号__imp__DragAcceptFiles@8nafxcw.lib(appcore.obj):错误LNK2001:无法解析的外部符号_ClosePrinter@4nafxcw.lib(appcore.obj):错误LNK2001:无法解析的外部符号_DocumentPropertiesA@24nafxcw.lib(appcore.obj):错误LNK2001:无法解析的外部符号_OpenPrinterA@12nafxcw.lib(filecore.obj):错误LNK2001:无法解析的外部符号__imp__SHGetFileInfoA@20nafxcw.lib(filecore.obj):错误LNK2001:无法解析的外部符号_GetFileTitleA@12
如果我使用不同的值赋值,如2、4或其他整数,一切都可以正确编译并工作。
任何建议吗?这里发生了什么?为什么会有这种奇怪的行为?
编辑:显然问题不在于atoi。如果我使用一个自制的函数来做任何事情,接受一个char*并返回一个int,或者直接用int替换函数链的第二个形参并直接赋值,我仍然会收到相同的错误。
你可以试试:
include ('limits.h');
int my_getnbr(char *str)
{
int i;
long nbr;
int neg;
neg = 0;
nbr = 0;
i = 0;
if (str[0] == '-')
{
neg = 1;
str++;
}
while (str[i] >= '0' && str[i] <= '9')
{
nbr = nbr * 10 + (str[i++] - '0');
if (nbr > INT_MAX)
return (0);
}
return (neg ? (int)nbr * -1 : (int)nbr);
}
这只是一个家里做的玩具。
编辑:INT_MAX by Alter Mann。编辑bis: if (nbr> INT_MAX) by Alter Mann again:)
我唯一能想到的是简化的函数被编译不存在,然后链接器有用地假设库中没有代码可以链接,因此它被丢弃,不幸的是它是唯一强迫包括那些MFC库的东西。
我不知道为什么它甚至需要像OpenPinter这样的东西-它包含在winspool.h(通过windows.h)中,除了说它听起来像你有一个讨厌的基于mfc的混乱来排序。由于它依赖于以特定顺序指定的特定包含,因此它从来都不是很好的WRT整洁构建。
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- OpenACC 嵌套循环依赖关系错误
- Windows上的CMake-zlib依赖关系错误
- dpkg-shlibdeps:错误:未找到依赖关系信息
- 链接器错误:模板关系运算符
- 大量的页面错误与内存碎片有任何关系
- 使用atoi时的依赖关系和错误
- 在基类和扩展类之间存在关系的情况下,没有匹配函数错误
- c++中类关系中的错误
- C++错误:类与同一头文件中的结构有关系