包含文件中的更改未在C中注册

时间:2014-11-24 01:15:42

标签: c linux gcc cc

我在Arch Linux上。我试过gcc和cc。

我有一个很奇怪的问题。我有一个文件包含在/ usr / include(从Arch包安装)中的C程序中。

// prog.c
#include <foobar/foobar.h>

当我改变它时,没有任何反应。让我解释。它包含一些C代码。

// foobar/foobar.h
int baz = 1, qux = 2;

最近,它已经更新。

// foobar/foobar.h
int baz = 1, qux = 2, norf = 3;

我的测试程序看起来如下所示。

// prog.c
#include <foobar/foobar.h>
printf ("%d %d %d\n", baz, qux, norf);

输出:

error: ‘norf’ undeclared (first use in this function)

我可以在同一目录中复制该文件,将其命名为foobar2.h,然后包含该文件,然后输出:

1 2 3

所以路径不正确。我可以链接到该文件夹​​,将其命名为foobar2,并包含foobar2 / foobar.h并输出:

1 2 3

所以文件不正确。

要确认它没有注册更改,我可以完全销毁foobar文件夹并尝试仅打印最初位于标题内的2个变量。这输出:

1 2

显然有些东西没有更新。当我尝试使用文件中现有项目的枚举,函数或新值更新文件时,会显示相同的行为,并将它们包含为文件中的唯一行。没有任何更改注册。使用gcc和cc显示相同的活动。这已经持续了几个月,现在还没有解决。

2 个答案:

答案 0 :(得分:2)

当文件似乎没有更新时,最好检查系统上编译器搜索同名文件夹的库的其他位置。在这种情况下,它位于/ usr / local / include中,我编写了一个完全忘记的版本。

答案 1 :(得分:0)

这可能主要是由于包含目录路径不匹配。查看可能影响C_INCLUDE_PATHCPATH等行为的环境变量。另一种选择是在编译过程中与gcc -I/src/directory foobar.h核对,以便更接近问题或在代码中使用#include "foobar.h"

如果您的系统中有多个程序副本,则可能会使用完全不同的文件进行编译和执行,这也可能导致更改无法反映。