我有一个在g++ 4.8.1和clang >= 3.3下以c++11模式正确编译和运行的项目。然而,当我切换到实验性的-std=c++1y模式时,clang3.3(而不是g++)阻塞了通过Boost.Test间接包含的<cstdio>头(所以我自己很难更改它)。
// /usr/include/c++/4.8/cstdio
#include <stdio.h>
// Get rid of those macros defined in <stdio.h> in lieu of real functions.
// ...
#undef gets
//
在我的主.c文件中,我将NUMBER定义为:
#define NUMBER '0'
在另一个.c file2中,我将其声明为“外部整型”变量并使用它。但在编译时,gcc给出了以下错误信息:
/tmp/ccsIkxdR.o: In function `file2':
file2.c:(.text+0xfd): undefined reference to `NUMBER'
collect2: error: ld returned 1 exit status
请给我建议一条出路。提前谢谢。
当我试图在visual studio 2010中编译我的C++项目时,我从visual studio自己的cstdlib和cstdio文件中得到了一堆错误c0254,c0259,c2061 (都与语法相关)。我的理解是,这是C和C++混合的结果。鉴于我已经相当自由地复制和粘贴了代码,我如何才能有效地区分代码呢?我有我复制和粘贴的所有来源,如果有帮助的话。
我正在尝试通过运行软件包附带的测试代码来测试Eigen的NonLinear优化功能。
我被这些错误卡住了(更像是困惑):
Error 5 error C2039: 'please_protect_your_min_with_parentheses' : is not a member of 'std::numeric_limits<double>' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\eigen-eigen-5097c01bcdc4\unsupported\
我有一个ANSI C程序,包含两个文件。第一个文件包含main()函数,第二个文件包含第一个文件调用的其他函数。在main()函数定义之前,我放置了以下代码:
#define PI 3.14159265358979323846
但是第二个文件没有看到这个变量。第一个文件看上去很好。然后,在函数定义之前,我将这一行放在第二个文件中(同时保持在第一个文件中),但第二个文件仍然没有看到它。事情总是很好的编译,但是当跟踪gdb中的变量PI时,它显示了"No symbol "PI" in current context."。
如何在应用程序中编译的所有文件中使PI成为一个
我花了很多时间调试一个问题,这个问题是由两个源文件引起的,其中包括两个不同顺序的头文件。其中一个头文件将_FILE_OFFSET_BITS定义为64位,另一个头文件包括<sys/types.h>,它将off_t定义为32位或64位长,具体取决于_FILE_OFFSET_BITS的设置。我已经在下面包含了这种情况的一个简短示例。这是在Debian Linux (包括x86_32不稳定版和CentOS 4.8)上实现的。
无论是gcc -Wall main.c other.c、Solaris9lint还是splint都无法检测到这种情况。
有没有人知道可以检测这种情况的软件工具?
ma