我放下了一些代码4或5年&今天又把它拿起来了。
我没有改变代码,但是在这几年里我升级了Netbeans并卸载了Cygwin 32位,今天安装了Cygwin 64位。
主要的预处理器宏是在Netbeans项目中定义的,而不是在代码中定义的。有些似乎没问题,但有些人给我这样的错误:
g++ -c -g -DBUILD_VERSION_MAJOR\ \ \(0\) -DBUILD_VERSION_MINOR\ \(1\) -DDEFAULT_FREED_MEMORY_VALUE\ \(0xA5\) -DDEFAULT_UNITIALIZED_MEMORY_VALUE\ \(0XCC\) -DDO_TRACING -DTESTING -DTRACE_FILENAME_LENGTH\ 17 -DTRACE_FILE_NAME -MMD -MP -MF "build/Debug/Cygwin_4.x-Windows/_ext/1472/cppUnitMain.o.d" -o build/Debug/Cygwin_4.x-Windows/_ext/1472/cppUnitMain.o ../cppUnitMain.cpp
<command-line>:0:26: error: expected ']' before numeric constant
../testing/buffer_pool/../../system/h/buffer_pool_private.h:92:16: note: in expansion of macro 'TRACE_FILENAME_LENGTH'
char fileName[TRACE_FILENAME_LENGTH];
但是当我评估TRACE_FILENAME_LENGTH]
时,它会说17
。
包含错误的文件确实包含声明宏的文件(否则,我想,NetBeans不会对其进行评估)。
如果我在提出问题的行之前尝试#define TRACE_FILENAME_LENGTH 17
我仍然会收到相同的错误,但也会出现警告
In file included from ../testing/buffer_pool/test_buffer_pool.h:37:0,
from ../cppUnitMain.cpp:46:
../testing/buffer_pool/../../system/h/buffer_pool_private.h:79:0: warning: "TRACE_FILENAME_LENGTH" redefined [enabled by default]
#define TRACE_FILENAME_LENGTH 17
^
之前工作过。现在不行。没有代码更改。相同的NetBeans项目,但可能已由NetBeans升级。 Cygwin 64而不是Cygwin 32。
有什么想法吗?
[更新]我使用-E选项运行GCC以仅运行pr处理器,该行说char fileName[17];
。最奇怪的!
对于命令行,我无法控制,因为它是由NetBeans生成的。
我还尝试在项目选项中更改为TRACE_FILENAME_LENGTH=17
而不是TRACE_FILENAME_LENGTH 17
,但这不起作用,而且以前使用空格而不是=
工作(几年前)