C预处理器中一个表达式的多个结果
为了解决这个问题,我将代码缩减到最小,以查找错误并检查主文件中定义的表达式C预处理器中一个表达式的多个结果,c,c-preprocessor,avr-gcc,C,C Preprocessor,Avr Gcc,为了解决这个问题,我将代码缩减到最小,以查找错误并检查主文件中定义的表达式F_CPU的结果 #ifndef USART_H_ #define USART_H_ #include <avr/io.h> #define USART_BAUDRATE 4800 #define USART_BSCALE -3 #if USART_BSCALE < 0 #define USART_BSEL ((F_CPU / 1
F_CPU
的结果
#ifndef USART_H_
#define USART_H_
#include <avr/io.h>
#define USART_BAUDRATE 4800
#define USART_BSCALE -3
#if USART_BSCALE < 0
#define USART_BSEL ((F_CPU / 16) * (1<<(-1*USART_BSCALE)) / USART_BAUDRATE - (1<<(-1*USART_BSCALE)))
#if (USART_BSEL < 0)
#pragma message "BSEL < 0"
#elif (USART_BSEL == 0)
#pragma message "BSEL = 0"
#elif (USART_BSEL > 0)
#pragma message "BSEL > 0"
#endif
#endif
#endif
如何从该代码中获取多条消息?它们又有什么不同呢
输出总是两行,但根据我对
BAUDRATE
和F_CPU
(我使用了L、UL和ULL)使用的整数后缀,我会得到不同的pragma消息。为什么预处理器的行为是这样的?什么是“F#U CPU定义”?它包含了两次吗?为了精确地生成这两条pragma行,它是#定义F#U CPU 32000000 ul
,当将代码转换为.c并添加F#U CPU定义时,我只得到BSEL>0。Peder:对于每个包含,您得到一个打印输出。一些东西(F#u CPU?)在包含之间发生变化。什么是F#u CPU定义?它包含两次吗?为了精确地生成这两条pragma行,它是#define F#u CPU 32000000 ul
,当将代码转换为.c并添加F#u CPU define时,我只得到BSEL>0。Peder:对于每个包含,您都得到一个打印输出。在包裹体之间有些东西(F_CPU?)发生了变化。
#pragma message: BSEL > 0
#pragma message: BSEL < 0