相关疑难解决方法(0)

您遇到过的最糟糕的真实世界宏/预处理器滥用情况是什么?

您遇到的最糟糕的 现实世界宏/预处理器滥用是什么(请不要设想IOCCC答案*哈哈*)?

如果它真的很有趣,请添加一个简短的片段或故事.目标是教一些东西,而不是总是告诉人们"永远不要使用宏".


ps:之前我曾经使用过宏...但是当我有一个"真正的"解决方案时,我最终会摆脱它们(即使真正的解决方案是内联的,它也会变得类似于宏).


额外:举一个例子,宏实际上比非宏解决方案更好.

相关问题: C++宏什么时候有用?

c c++ macros preprocessor

176
推荐指数
36
解决办法
11万
查看次数

153
推荐指数
5
解决办法
3万
查看次数

Code Golf:玩多维数据集

挑战

按字符数最短的代码,根据用户输入输出玩砖塔系列.

输入将是一系列数字(正数,负数和零),表示当前立方体塔在其索引之后的高度.高度为0表示没有塔并且间隔开.

立方体塔由堆积的立方体组成.如果当前索引上的输入数字为正,则立方体会上升,如果输入数字为负数,则立方体会下降.使用以下4行绘制单个立方体:

   __
 /__ /|
|   | |
|___|/

立方体是3D - 这意味着当两个塔彼此相邻放置时它们彼此隐藏,产生假视角.

可以假设所有输入都是有效且没有错误 - 每个数字在一行上用空格分隔,至少有一个数字.

测试用例

Input:
    2 -3 -2 1 2 -1
Output:
       __              __
     /__ /|          /__ /|
    |   | |        _|   | |
    |___|/|      /__|___|/|
    |   | |__  _|   |   | |__
    |___|/__ /__|___|___|/__ /|
        |   |   | |     |   | |
        |___|___|/|     |___|/
        |   |   | |
        |___|___|/
        |   | |
        |___|/

Input:
    1 2 3 4 -2 4 3 2 1
Output:
                   __ …

language-agnostic code-golf rosetta-stone

61
推荐指数
7
解决办法
3386
查看次数

C'for'循环中的多个条件

我遇到了这段代码.我通常使用'&&'或'||' 在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

有人能解释一下原因吗?它似乎只检查最后一个以逗号分隔的条件.

c for-loop

28
推荐指数
3
解决办法
10万
查看次数

为什么这个C++代码会编译?它有什么作用?

我不小心删除了方法名称时遇到了这个问题.代码来自

bool bRet = MethodName(pData, pOutFilename);
Run Code Online (Sandbox Code Playgroud)

bool bRet = (pData, pOutFilename);
Run Code Online (Sandbox Code Playgroud)

但仍然编译?这段代码有什么作用?这是什么意思?它似乎返回true,总是这样(即使pData为null)?

欢迎任何想法!

c c++ syntax

22
推荐指数
2
解决办法
1412
查看次数

逗号分隔的值列表用括号括起来在C中表示什么?a =(1,2,3);

我刚刚遇到了基本上执行以下操作的代码:

int a = (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这种表示法.这是什么意思?

c c++ comma

19
推荐指数
4
解决办法
2173
查看次数

C逗号运算符

为什么在逗号运算符(例如下面的示例)中指定的表达式不被视为常量表达式?

例如,

int a = (10,20) ;
Run Code Online (Sandbox Code Playgroud)

当在全局范围内给出时产生错误"初始化器不是常量",尽管由逗号运算符分隔的两个表达式都是常量(常量表达式).为什么整个表达式不被视为常量表达式?为了澄清我已经阅读了','运算符在C中做了什么?C逗号运算符的使用.他们没有涉及逗号运算符的这个方面.

c expression scope comma-operator

15
推荐指数
2
解决办法
1764
查看次数

13
推荐指数
2
解决办法
6193
查看次数

使用逗号运算符是一种好习惯吗?

我最近(实际上仅在SO上)遇到了C/C++逗号运算符的使用.据我所知,它在左侧和右侧操作符之间的线上创建了一个序列点,以便您具有可预测(定义)的评估顺序.

我有点困惑为什么会在语言中提供这个,因为它似乎是一个可以应用于首先不起作用的代码的补丁.我发现很难想象它可以被使用的地方不是太复杂(并且需要重构).

有人可以解释这种语言功能的目的,以及它可以在实际代码中使用的位置(在合理范围内),如果有的话?

c c++ operators

12
推荐指数
4
解决办法
948
查看次数

字符串连接,为什么编译?

我在我的代码中发现了这个,这是我的错字,但它仍然编译.谁知道为什么?我不知道.

#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)

c++

10
推荐指数
1
解决办法
448
查看次数