c++ - 你能处理 C++ 中的编译时错误吗?

标签 c++ compiler-errors

我的项目有一个清空终端的功能,是使用curses库实现的。使用 -lcurses 标志编译工作正常,但编译时没有 yields

/tmp/cc3T2MVI.o: In function `ClearScreen()':
clear_term.cpp:(.text+0xb): undefined reference to `cur_term'
clear_term.cpp:(.text+0x26): undefined reference to `setupterm'
clear_term.cpp:(.text+0x37): undefined reference to `tigetstr'
clear_term.cpp:(.text+0x3f): undefined reference to `putp'
collect2: ld returned 1 exit status

这显然是预期的,因为它找不到库,但由于此功能是补充功能,因此最好将 ClearScreen() 定义为空函数,而不是让编译失败。我知道我将函数定义放在 #ifdef block 中,但我不知道 curses 定义的任何标志。

是否可以捕获这些错误并将 ClearScreen() 定义为空函数?

最佳答案

您可以在 Makefile 中定义一个宏:

use_curses=1
FLAGS+=-DUSING_MAKEFILE
ifeq ($(use_curses),0)
    FLAGS+=-DNO_NCURSES
else
    LIBS+=-lcurses
endif

在代码中:

#ifndef USING_MAKEFILE
#       error "Please use provided Makefile to compile!"
#endif

#ifdef NO_CURSES
        void ClearScreen() { }
#endif

关于c++ - 你能处理 C++ 中的编译时错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487585/

相关文章:

java - Java编码-程序在运行时挂起

c++ - 写入纹理数组的一层并从另一层读取

c++ - 检查文件描述符中可用缓冲区字符的数量

c++ - 如何生成通过交换元素(例如 : from {0, 1,2} 到 {0,2,1})将数组更改为另一个数组的步骤?

c++ - c++ 中的两个 'char*' 铸件有什么区别

visual-c++ - wxwidget 2.9.1在Visual C++上编译,错误MSB 3073 : The command xcopy

ios - 如何解决此 Spritekit (Swift 3) 错误?

C++,Xcode。每次我尝试使用类时都会出现同样的错误

c++ - QTableView 中仅可编辑的复选框列

C - 在 Ubuntu v12.10 上编译 OpenSSL 头文件的问题