c++宏调用不当终止
C++ Macro improperly terminated macro invocation
在c++中是否有一种机制允许非终止宏被表达?这是一个人为的例子:
#define MACRO(x, y) x + y
#define MACROC1(x) MACRO(x,
#define MACROC2(y) y)
//...expecting 3
int foo = MACROC1(1) MACROC2(2);
我从MSVC收到错误终止宏调用。
当我运行cl -E file.cpp时,我看到下面的代码已经生成:
int c = 1 + 1 + 2);
在visual studio中编译失败并出现错误:语法错误:')'智能感知:宏调用不正确终止
我认为这是不可能的。C预编译器以深度优先的方式展开宏,因此在考虑MACROC2之前,MACROC1就已经完全展开了。然后,它将找到带有不完整参数列表的MACRO,并抛出一个错误。
一般来说,应该避免定义构建其他宏调用的宏。编译器往往不同意这些含义
您的代码将翻译为:
int foo = MACRO(1, 2;
这是错误的-这是一个不完整的(不正确终止的)宏调用宏。
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 在抛出 'std::runtime_error' 的实例后终止调用 what(): Filebuf 和 ostream 的 I/O 错误
- 在抛出 'std::invalid_argument' 的实例后终止调用 what(): stoi (找不到问题所在)
- 终止调用本机代码的 .Net 线程
- C++程序问题:抛出'std::invalid_argument'实例后终止调用
- 当可以返回错误/异常时,从库中终止调用程序(例如,调用exit())是否总是错误的?
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- 在抛出 'std::bad_weak_ptr' 的实例后终止调用 what(): bad_weak_ptr?
- 调试"在抛出 ..) 实例后终止调用",当异常 _should_ 被捕获时
- 引发实例后终止调用 - C++错误
- 在抛出 std::bad_alloc 实例后终止调用.使用两个类,一个带有指向另一个的指针
- 在抛出"pqxx::syntax_error"的实例后终止调用?
- C++11 快速排序终止调用,没有活动异常
- C++:在没有活动异常(GCC)的情况下终止调用
- 在抛出 std::string 实例后终止调用
- 在抛出"std::bad_alloc"实例后终止调用
- 在抛出"std::out_of_range"实例后终止调用