链接到 pthreads 的原因导致程序行为发生变化?

Reason linking to pthreads causes a change in program behavior?

当链接到 pthreads 时,我在程序执行期间遇到意外行为,ncurses 界面变得无响应,但程序没有崩溃。这没有使用任何 pthread 功能,没有线程头或任何与线程相关的东西,只是链接。

链接到库是否可以在不发出警告的情况下更改程序行为?

相关信息:

将 ncurses 和 pthread 链接在一起在我制作的一个较小的测试程序上运行良好。所以我正在寻找更多的地方,它是一个库项目,代码库大小合适,除了一个使用 ncurses 库的小组件外,它都是普通的 C++14。

如果您没有更改代码中的任何内容,甚至没有包含 headers,但行为发生了变化,那么您的项目包含 UB。标准中定义的可能 UB,可能导致此问题:

  • 定义与名称匹配的任何函数或全局变量包含在标准 headers
  • 正在 std 命名空间中定义内容。
  • 使用旧的 C 标准 headers 与新的 C++ headers
  • 使用未确定值初始化的变量。
  • 数组边界违规,不会导致页面错误或其他类型的灾难性结果,可能会导致程序更改行为。
  • 非法使用运算符 side-effects,例如:a ^=b ^= a ^=b

等等。

我建议检查警告,而不仅仅是错误。某些警告实际上是语义错误或 UB 的迹象。至少对于海湾合作委员会。许多新手程序员只是忽略 non-essential 的警告。例如。这种经常潜入:

const char a = 167;

if(a == 167)  // compiler makes warning here, a ==-89 in this example
{
    // code will never be executed or even compiled
}

代码编译但未按预期方式执行。