标签: macros

代码无法选择声明的宏

在下面的代码中,输出值不是宏定义的,是因为这些值必须在预处理器阶段之前可用吗?

#define INT_MAX 100

#include <iostream>

using namespace std;

int main()
{
    int x = INT_MAX;
    x++;
    cout<<x<<INT_MAX;
}
Run Code Online (Sandbox Code Playgroud)

结果是-2147483648

c c++ macros

-2
推荐指数
1
解决办法
86
查看次数

(C/C++)如何创建一个接受增量运算符的宏

为了使我的问题精确,我想创建一个接受变量++并将其与另一个变量粘贴的宏.在代码中:

#define MYMACRO(A, OP) /* .... */
Run Code Online (Sandbox Code Playgroud)

然后,如果我写在源文件中

MYMACRO(this->var, ++)
Run Code Online (Sandbox Code Playgroud)

预处理器应粘贴代码

this->var++;
Run Code Online (Sandbox Code Playgroud)

当我尝试将宏定义为A ## OP时,它提供以下错误:

粘贴"++"和"var"不会提供有效的预处理令牌

有可能做我正在尝试的事情吗?

提前谢谢你的答案

c c++ macros c-preprocessor

-2
推荐指数
1
解决办法
375
查看次数

宏 - 表达式不可分配

编译时出现此错误:

macro.c:11:2: error: expression is not assignable
    ProdottoAumentato(10, 20);
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会这样说,我找不到任何错误.这是代码:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

#define ProdottoAumentato(X, Y)    X++; X * Y;

int main(void) {

    ProdottoAumentato(10, 20);

    printf("\nEnd\n");
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

c macros c-preprocessor

-2
推荐指数
2
解决办法
575
查看次数

C++ 智能宏——正则表达式

介绍(如果你不想要,请不要阅读,这只是背景)
我正在为 C++ 创建一个 API,以便它具有类似 python 的功能,而不会失去它的本质。我已经成功开发了一个自动通用异常处理系统(我在这里问如何做到这一点,@MacZamborg 告诉我它是如何工作的,所以我开始从头开始拆除所有东西)。就像我说的,我设法重载了很多东西,以便自动抛出相应的异常(它继承自 std::exception)。我唯一遇到的问题是 ZERO_DIVISION 异常,因为您似乎不能只为整数重载运算符,即参数之一必须是对象。所以我创建了 Object Num,它使用联合来存储任何可用的数字数据)-> 这意味着,我必须重载每个运算符 11 次,所以我想避免需要重载X=运算符。(也在这里问了一些关于它的事情)。


有没有办法在任何 IDE 中制作智能宏?什么是智能宏,你可能会问,好吧,让我们假设有一种叫做 C+++ 的新语言,它实现了智能宏 > 智能宏应该像这样 >

#define "regEx" "Literal replacement"
Run Code Online (Sandbox Code Playgroud)

在实践中:

#define '([^\d ]?\w+\s*)\+=' '$groups[0] = $groups[0] + '
Run Code Online (Sandbox Code Playgroud)

随着([^ \ d] \ w + \ S *)作为组数组中的唯一元素(语法来自python的正则表达式,我可能有一些错误,但这个想法是一样的)。regEx 的那部分将匹配任何有效的变量名(包括保留关键字 [不可取,但我们用\+=去掉它们]),也就是说,任何以空格或数字开头的单词,包含任何字符,并以空格(0 或更多)结尾。之后,它查找+=运算符,如果匹配,则将整个匹配替换为'$groups[0] = $groups[0] + ',即在唯一组中找到的任何内容(由括号表示) ), 'space' '=' 'space' '又发现了什么' 'space' '+' …

c++ regex macros

-2
推荐指数
1
解决办法
561
查看次数

比较 ifdef 指令中的字符串

我在编译过程中传递了一个 macto:

% gcc -DIDENT="abcd" app.c

在编译宏期间检查的正确方法是什么?例如下面的工作,但抛出警告:

#ifdef IDENT == "abcd"
printf("abcd\n");
#endif
Run Code Online (Sandbox Code Playgroud)

警告:#ifdef 指令末尾的额外标记。

c macros conditional-compilation

-2
推荐指数
1
解决办法
1746
查看次数

用括号和无括号定义的宏 - 重定义错误

#define WITHBRACKETS (1)和之间有什么区别#define WITHBRACKETS 1

我在两个具有相同名称的地方定义了宏(我知道这可能导致重新定义警告,这是一件坏事),但它们的定义不同.

所以当我编译代码库时,编译器为什么说,#define WITHBRACKETS (1)是不兼容的重新定义#define WITHBRACKETS 1

c c++ macros

-2
推荐指数
1
解决办法
226
查看次数

在C++中键入宏

     #define int double
     #define double int


     int a = 5.5;
     double f = 5.5;

     cout << a << " " << f << endl;
Run Code Online (Sandbox Code Playgroud)

以下代码片段实际输出5 5.5,意味着int实际上意味着int,而double实际上意味着double.

我想知道这有什么意义?我可以相信int和double意味着int,如果定义是一个接一个地执行,或者其中两个改变它们的含义(如果它们都同时执行),但我找不到对这种行为的正确解释.

为什么会这样?

c++ macros double int

-2
推荐指数
1
解决办法
188
查看次数

如何使宏在for循环中生成代码?

我在代码审查中注意到以下代码:

for (int i = 0; i < 50; ++i) {
  switch(i) {
    case 0:
      return f1();
    case 1:
      return f2();
    ...
    case 49:
      return f50();
  }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何优雅的方式,例如使用宏来简化此代码(将其减少到几行):

谢谢.

c c++ macros c-preprocessor

-2
推荐指数
1
解决办法
93
查看次数

#define 的“声明未声明任何内容”错误

我试图定义lllong long. 但是,这没有编译并引发错误。

我在 Windows 机器上使用 VS Code。我也在使用 gcc 8.2.0 版。

这是代码 -

#include <bits/stdc++.h>

using namespace std;

#define ll long long int;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    ll t;

    cin >> t;

    return 0;
}

Run Code Online (Sandbox Code Playgroud)

在编译这个时,我收到了这个错误 -

test.cpp: In function 'int main()':
test.cpp:5:22: error: declaration does not declare anything [-fpermissive]
 #define ll long long int;
                      ^~~
test.cpp:12:5: note: in expansion of macro 'll'
     ll t;
     ^~
test.cpp:12:8: error: 't' was not declared in this scope …
Run Code Online (Sandbox Code Playgroud)

c++ macros compiler-errors g++ c++14

-2
推荐指数
1
解决办法
651
查看次数

借助宏或 typedef 的 C 中的有效表达式:(x) ((x) - 1)

(x) ((x) - 1)宏或 typedef 的帮助下,“表达式”能否成为有效的 C 表达式?

c macros expression

-2
推荐指数
1
解决办法
99
查看次数