小编a3f*_*a3f的帖子

C中的MIN和MAX

在C中的位置MINMAX定义,如果有的话?

实现这些的最佳方式是什么,尽可能通用和安全?(首选编译器扩展/内置主流编译器.)

c max min c-preprocessor

265
推荐指数
11
解决办法
67万
查看次数

如何制作可变参数宏(可变数量的参数)

我想在C中编写一个宏,它接受任意数量的参数,而不是特定的数字

例:

#define macro( X )  something_complicated( whatever( X ) )
Run Code Online (Sandbox Code Playgroud)

哪里X有任何数量的参数

我需要这个,因为它whatever是重载的,可以用2或4个参数调用.

我试过两次定义宏,但第二个定义覆盖了第一个!

我正在使用的编译器是g ++(更具体地说,mingw)

c g++ variadic c-preprocessor

182
推荐指数
5
解决办法
18万
查看次数

如何在switch语句中添加"或"?

这就是我想要做的:

switch(myvar)
{
    case: 2 or 5:
    ...
    break;

    case: 7 or 12:
    ...
    break;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我尝试了"case:2 || 5",但它没有用.

目的是不为不同的值编写相同的代码.

c# switch-statement

119
推荐指数
7
解决办法
11万
查看次数

Java交换机案例:有或没有大括号?

考虑以下两个带括号的片段:

switch (var) {
  case FOO: {
    x = x + 1;
    break;
  }

  case BAR: {
    y = y + 1;
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)

没有括号:

switch (var) {
  case FOO:
    x = x + 1;
    break;

  case BAR:
    y = y + 1;
    break;
}
Run Code Online (Sandbox Code Playgroud)

我知道,在带括号的代码段中,通过将每个案例括在大括号中来创建一个新的范围.但是,如果每个案例都不需要新范围(即没有重用变量名称),那么在案例中使用大括号是否存在任何性能损失?

java performance switch-statement

81
推荐指数
6
解决办法
4万
查看次数

如何使用宏参数作为字符串文字?

我试图弄清楚如何编写一个宏,将一个变量名称的字符串文字表示与变量本身一起传递给一个函数.

例如,给出以下功能.

void do_something(string name, int val)
{
   cout << name << ": " << val << endl;
}
Run Code Online (Sandbox Code Playgroud)

我想写一个宏,所以我可以这样做:

int my_val = 5;
CALL_DO_SOMETHING(my_val);
Run Code Online (Sandbox Code Playgroud)

哪个会打印出来: my_val: 5

我尝试过以下操作:

#define CALL_DO_SOMETHING(VAR) do_something("VAR", VAR);
Run Code Online (Sandbox Code Playgroud)

但是,正如您可能猜到的那样,引号内的VAR不会被替换,而只是作为字符串文字"VAR"传递.所以我想知道是否有办法让宏参数变成字符串文字本身.

c++ string-literals c-preprocessor

76
推荐指数
4
解决办法
10万
查看次数

#ifdef在#define中

我想写这样的东西:

#define COV_ON(x) \
                #ifdef COVERAGE_TOOL \
                    _Pragma (COVERAGE #x)
                #endif
Run Code Online (Sandbox Code Playgroud)

有没有办法COV_ON像这样定义?我知道我上面做的是错误的,因为我不能#ifdef在#define里面.(#不是允许的角色#define).那么有什么解决方案吗?

c c-preprocessor

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

是否有可能在可变参数宏中迭代参数?

我想知道是否有可能迭代传递给C99中的可变参数宏或使用任何GCC扩展的参数?

例如,是否可以编写一个通用的宏,它接受一个结构,并将其字段作为参数传递,并打印结构中每个字段的偏移量?

像这样的东西:

struct a {
    int a;
    int b;
    int c;
};

/* PRN_STRUCT_OFFSETS will print offset of each of the fields 
   within structure passed as the first argument.
*/

int main(int argc, char *argv[])
{
    PRN_STRUCT_OFFSETS(struct a, a, b, c);

    return 0;
}

c foreach c99 variadic c-preprocessor

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

为什么Switch/Case而不是If/Else If?

这个问题主要针对C/C++,但我猜其他语言也是相关的.

我无法理解为什么仍然使用switch/case而不是if/else if.在我看来,很像使用goto,并导致相同类型的混乱代码,而相同的结果可以使用if/else,如果是更有条理的方式.

不过,我经常看到这些块.找到它们的一个常见位置是在消息循环(WndProc ...)附近,而这些是它们引发最严重破坏的地方之一:变量在整个块中共享,即使不是主要的(也不是在里面初始化).必须特别注意不要放弃休息,等等......

就个人而言,我避免使用它们,我想知道我错过了什么?

它们比if/else更有效吗?它们是否继承传统?

c c++ switch-statement conditional-statements

60
推荐指数
6
解决办法
4万
查看次数

C++中的DEBUG宏

我刚刚在C中遇到了一个我非常喜欢的DEBUG宏

#ifdef DEBUG_BUILD
#  define DEBUG(x) fprintf(stderr, x)
#else
#  define DEBUG(x) do {} while (0)
#endif
Run Code Online (Sandbox Code Playgroud)

我猜一个C++模拟会是: -

#ifdef DEBUG_BUILD
#  define DEBUG(x) cerr << x
#else
#  define DEBUG(x) do {} while (0)
#endif
Run Code Online (Sandbox Code Playgroud)
  1. 第二个代码片段是否类似于C中的代码片段?
  2. 你有任何喜欢的C++调试宏吗?

编辑:通过"调试宏"我的意思是"在调试模式下运行程序时可能派上用场的宏".

c c++ debugging c-preprocessor

56
推荐指数
6
解决办法
7万
查看次数

有没有办法在另一个#define中进行#define?

我知道我正试图在腿上射击自己;)然而,它将允许我使其余(大量)代码更小,更易读.

是否有任何棘手的方法在另一个预处理器宏内部创建预处理器宏?

这是一个例子,我在寻找什么.我的真实场景更复杂

// That's what I want to do and surely C++ doesn't like it.
#define MACROCREATER(B) #define MACRO##B B+B

void foo()
{
 MACROCREATOR(5) // This should create new macro (#define MACRO5 5+5)

 int a = MACRO5; // this will use new macro
}
Run Code Online (Sandbox Code Playgroud)

c++ c-preprocessor

47
推荐指数
6
解决办法
3万
查看次数