- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有人可以告诉我我做错了什么吗?
#include <iostream>
using namespace std;
int main() {
#define myvar B
#if myvar == A
cout << "A" << endl;
#elif myvar == B
cout << "B" << endl;
#else
cout << "Neither" << endl;
#endif
}
输出是 A 但显然我期待 B
最佳答案
这个:
#if myvar == A
扩展为:
#if B == A
引用C++标准:
After all replacements due to macro expansion and the defined unary operator have been performed, all remaining identifiers and keywords, except for true and false, are replaced with the pp-number 0, and then each preprocessing token is converted into a token.
所以这等同于:
#if 0 == 0
这当然是真的。
预处理器表达式中的 ==
运算符不比较字符串或标识符,它只比较整数表达式。您可以通过为 A
、B
和 myvar
定义整数值来完成您想做的事情,例如:
#define A 1
#define B 2
#define myvar B
#if myvar == A
cout << "A" << endl;
#elif myvar == B
cout << "B" << endl;
#else
cout << "Neither" << endl;
#endif
关于C++ #if#elif#endif 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19204792/
当使用 Unity 5 (B18) 并为 iOS 构建时,出现以下错误: .../RegisterMonoModules.cpp:87:2: error: #endif without #if #en
在 C# 中有更快的方法吗 #if foo Something(); #endif 像伪代码: #if(foo, DoThat(); ) 我是程序员,程序员很懒;-) 最佳答案 没有什么可以让你写
如何检查版本 >= 设定版本,例如2.3.4.17 如果我有以下定义(每个定义可能有1-2位数字)? #define VERSION_NUM_MAJOR 1 #define VERSION_NUM_M
这个问题已经有答案了: Scope of macros in C? (7 个回答) 已关闭 8 年前。 正如标题所暗示的,我的问题是预处理器指令是否 #if和#endif充当范围?考虑这个例子: #d
这个问题已经有答案了: Use #ifdefs and #define to optionally turn a function call into a comment (11 个回答) 已关闭 8
我应该始终将 #if 指令与 #endif 结合使用吗? 如果是 - 如果我只使用 #if 会有什么问题? 如果不是 - 当我只使用 #if 时,当组合使用 #if/#else 时? 谢谢。 最佳答案
我目前执行以下操作,编译器(MSVC2008/以及 2010)没有提示,但我不确定这是否是个坏主意: #ifndef FOO_H_ #define FOO_H_ // note, FOO_H_ is
假设我有两个文件,a.h: #if 1 #include "b.h" 和b.h: #endif gcc 和 clang 的预处理器都拒绝 a.h: $ cpp -ansi -pedantic a.h
我有一段我写的 vb.net 代码。这是一个带有两个嵌入式 if 语句的 for 循环,编译器告诉我每个 elseif 和 endif 必须以匹配的 if 开头。 这是我使用 vb.net 的第二天,
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 此问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-topic在这里
这个问题已经有答案了: What exactly does an #if 0 ..... #endif block do? (8 个回答) 已关闭 6 年前。 现在我又困惑了。在我们旧的 C 代码中,
我了解 C 语言中 #if#endif 预处理器指令的基础知识,因为根据哪个表达式计算结果为 true,#if 中的后续代码将被编译,但是我目前正在学习 portaudio(我正在为学校制作一个 VO
我需要两个正则表达式来识别if .. then .. else .. endif节及其部分。 来自如下表达式: 示例 1: 5 + 10 * (if (4 + 4.5) > 0 then 20 els
今天我想到了一个奇怪的问题 - #if...#endif 代码片段中可以放置的行数有上限吗? 我在第一行有一个#if,然后在第500行它突然关闭而没有#endif。这可能吗? 最佳答案 没有限制。 #
当前正在创建一个头文件,并使用ifndef、define、endif等创建它。 但是,每次我创建它时,Visual Studio Code 都会抛出错误。 #ifndef _roundemup_h_
int main(void) { #if 0 something" #endif return 0; } 上面的一个简单程序会生成一个警告:missing termin
这个问题在这里已经有了答案: Are tokens after #endif legal? (4 个答案) 关闭 9 年前。 考虑一下: #ifndef GUARD_H #define GUARD_
我最近不得不为比特币的脚本语言编写一个解释器;其中一部分涉及提出一种算法来检查给定脚本中的控制流是否有意义(即每个 OP_IF 都有一个匹配的 OP_ENDIF,每个 OP_ELSE 和 OP_END
为什么它不起作用?在第 7 行出现 Parse error: syntax error, unexpected ':' ... $a = 0; $b = 1; $c = 3; $d = 4; if (
这个问题不言自明。 在 PHP 中,我什么时候使用 if/endif 表示法而不是标准的 if(something){} 表示法? 例子: A is equal to 5 对比: A is eq
我是一名优秀的程序员,十分优秀!