您遇到的最糟糕的 现实世界宏/预处理器滥用是什么(请不要设想IOCCC答案*哈哈*)?
如果它真的很有趣,请添加一个简短的片段或故事.目标是教一些东西,而不是总是告诉人们"永远不要使用宏".
ps:之前我曾经使用过宏...但是当我有一个"真正的"解决方案时,我最终会摆脱它们(即使真正的解决方案是内联的,它也会变得类似于宏).
额外:举一个例子,宏实际上比非宏解决方案更好.
相关问题: C++宏什么时候有用?
按字符数最短的代码,根据用户输入输出玩砖塔系列.
输入将是一系列数字(正数,负数和零),表示当前立方体塔在其索引之后的高度.高度为0表示没有塔并且间隔开.
立方体塔由堆积的立方体组成.如果当前索引上的输入数字为正,则立方体会上升,如果输入数字为负数,则立方体会下降.使用以下4行绘制单个立方体:
__ /__ /| | | | |___|/
立方体是3D - 这意味着当两个塔彼此相邻放置时它们彼此隐藏,产生假视角.
可以假设所有输入都是有效且没有错误 - 每个数字在一行上用空格分隔,至少有一个数字.
Input:
2 -3 -2 1 2 -1
Output:
__ __
/__ /| /__ /|
| | | _| | |
|___|/| /__|___|/|
| | |__ _| | | |__
|___|/__ /__|___|___|/__ /|
| | | | | | |
|___|___|/| |___|/
| | | |
|___|___|/
| | |
|___|/
Input:
1 2 3 4 -2 4 3 2 1
Output:
__ … 我遇到了这段代码.我通常使用'&&'或'||' 在for循环中分隔多个条件,但此代码使用逗号来执行此操作.
令人惊讶的是,如果我改变条件的顺序,输出会有所不同.
#include<stdio.h>
int main() {
int i, j=2;
for(i=0; j>=0,i<=5; i++)
{
printf("%d ", i+j);
j--;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出= 2 2 2 2 2 2
#include<stdio.h>
int main(){
int i, j=2;
for(i=0; i<=5,j>=0; i++)
{
printf("%d ", i+j);
j--;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出= 2 2 2
有人能解释一下原因吗?它似乎只检查最后一个以逗号分隔的条件.
我不小心删除了方法名称时遇到了这个问题.代码来自
bool bRet = MethodName(pData, pOutFilename);
Run Code Online (Sandbox Code Playgroud)
至
bool bRet = (pData, pOutFilename);
Run Code Online (Sandbox Code Playgroud)
但仍然编译?这段代码有什么作用?这是什么意思?它似乎返回true,总是这样(即使pData为null)?
欢迎任何想法!
我刚刚遇到了基本上执行以下操作的代码:
int a = (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这种表示法.这是什么意思?
为什么在逗号运算符(例如下面的示例)中指定的表达式不被视为常量表达式?
例如,
int a = (10,20) ;
Run Code Online (Sandbox Code Playgroud)
当在全局范围内给出时产生错误"初始化器不是常量",尽管由逗号运算符分隔的两个表达式都是常量(常量表达式).为什么整个表达式不被视为常量表达式?为了澄清我已经阅读了','运算符在C中做了什么?和C逗号运算符的使用.他们没有涉及逗号运算符的这个方面.
我最近(实际上仅在SO上)遇到了C/C++逗号运算符的使用.据我所知,它在左侧和右侧操作符之间的线上创建了一个序列点,以便您具有可预测(定义)的评估顺序.
我有点困惑为什么会在语言中提供这个,因为它似乎是一个可以应用于首先不起作用的代码的补丁.我发现很难想象它可以被使用的地方不是太复杂(并且需要重构).
有人可以解释这种语言功能的目的,以及它可以在实际代码中使用的位置(在合理范围内),如果有的话?
我在我的代码中发现了这个,这是我的错字,但它仍然编译.谁知道为什么?我不知道.
#include <string>
#include <iostream>
int main()
{
std::string x;
std::string b = "Bryan";
x += '|' + b, x;
std::cout << x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)