Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用一个预处理器&x27;输入到C中的另一个预处理器?_C_Macros_C Preprocessor - Fatal编程技术网

是否可以使用一个预处理器&x27;输入到C中的另一个预处理器?

是否可以使用一个预处理器&x27;输入到C中的另一个预处理器?,c,macros,c-preprocessor,C,Macros,C Preprocessor,我正在尝试做这样的事情 #define INPUT (x = 3, y = 5) #define MATH(add) ((add == 1) ? (INPUT.x + INPUT.y) : (INPUT.x - INPUT.y)) void main (void) { int add = MATH (1); int subs = MATH (0); } 基本上我想简化这个 #define x 3 #define y 5 #define MATH(add) ((add == 1) ? (x +

我正在尝试做这样的事情

#define INPUT (x = 3, y = 5)
#define MATH(add) ((add == 1) ? (INPUT.x + INPUT.y) : (INPUT.x - INPUT.y))

void main (void)
{
int add = MATH (1);
int subs = MATH (0);
}
基本上我想简化这个

#define x 3
#define y 5
#define MATH(add) ((add == 1) ? (x + y) : (x - y))

void main (void)
{
int add = MATH (1);
int subs = MATH (0);
}

这在C中可能吗?

既然你非常想服用cpp药物,下面是一些值得思考的问题:

#include <stdio.h>

#define x 3
#define y 5
#define x1 +
#define x0 -
#define MATH(a) x x##a y

int main(void) {
    int add = MATH(1);
    int subs = MATH(0);

    printf("add=%d, sub=%d\n", add, subs);
    return 0;
}
#包括
#定义x3
#定义y5
#定义x1+
#定义x0-
#定义数学(a)x x#a#y
内部主(空){
int add=数学(1);
int subs=数学(0);
printf(“add=%d,sub=%d\n”,add,subs);
返回0;
}

既然你非常想服用cpp药物,下面是一些值得思考的问题:

#include <stdio.h>

#define x 3
#define y 5
#define x1 +
#define x0 -
#define MATH(a) x x##a y

int main(void) {
    int add = MATH(1);
    int subs = MATH(0);

    printf("add=%d, sub=%d\n", add, subs);
    return 0;
}
#包括
#定义x3
#定义y5
#定义x1+
#定义x0-
#定义数学(a)x x#a#y
内部主(空){
int add=数学(1);
int subs=数学(0);
printf(“add=%d,sub=%d\n”,add,subs);
返回0;
}

您希望实现什么目标?您可以选择使用
-E
gcc检查预处理的代码。实际上,我正在为Avr Mcu编写代码。我的意思是,您能提供一个完整的示例吗?实际上,我不明白您想要什么(您有一些预处理的文件,您想用其他编译器再次预处理它?)您想如何“简化”的示例事情比你开始时要复杂得多。你到底想做什么?为什么要使用宏呢?只需
intadd=3+5<代码>int subs=3-5会更简单,我想。@Suprovo这并不能真正解释你想做什么!使用这些宏的目标是什么?(不要只说“做数学”。)你想达到什么目标?您可以选择使用
-E
gcc检查预处理的代码。实际上,我正在为Avr Mcu编写代码。我的意思是,您能提供一个完整的示例吗?实际上,我不明白您想要什么(您有一些预处理的文件,您想用其他编译器再次预处理它?)您想如何“简化”的示例事情比你开始时要复杂得多。你到底想做什么?为什么要使用宏呢?只需
intadd=3+5<代码>int subs=3-5会更简单,我想。@Suprovo这并不能真正解释你想做什么!使用这些宏的目标是什么?(不要只是说“做数学”。)先生,事实上我知道这个过程。。。我正是在我的问题中寻找我提到的想象过程。。。因为我试图在“WinAVR”中简单地定义我的“AVR MCU”端口和引脚,就像在“CVAVR”中一样简单。我不想使用太多的“#define”,因为它看起来很笨重&内存有限。@Suprovo:您可能想为我们这些没有线索的人写一篇关于AVR MCU的更详细的解释。。。请注意,宏不使用目标系统中的任何内存。@Suprovo您应该避免将预处理器逻辑用于程序逻辑,因为这将导致重复的代码(指令),从而导致程序膨胀。最好使用更多的
#定义不产生任何此类惩罚的
常量值。请注意,如果不使用定义,则定义不会消耗内存,如果使用简单表达式,则常数折叠将为您提供最优化的代码(使用优化编译,如
-Os
),用于对GPIO、计时器等硬件寄存器进行编码访问。先生,实际上我知道这个过程。。。我正是在我的问题中寻找我提到的想象过程。。。因为我试图在“WinAVR”中简单地定义我的“AVR MCU”端口和引脚,就像在“CVAVR”中一样简单。我不想使用太多的“#define”,因为它看起来很笨重&内存有限。@Suprovo:您可能想为我们这些没有线索的人写一篇关于AVR MCU的更详细的解释。。。请注意,宏不使用目标系统中的任何内存。@Suprovo您应该避免将预处理器逻辑用于程序逻辑,因为这将导致重复的代码(指令),从而导致程序膨胀。最好使用更多的
#定义不产生任何此类惩罚的
常量值。请注意,如果未使用定义,则定义不会消耗内存,如果使用简单表达式,则常数折叠将为您提供最优化的代码(使用优化编译,如
-Os
),用于对GPIO、计时器等硬件寄存器进行编码访问。