首页 > 解决方案 > 使用时仅编译代码的特定部分

问题描述

我必须进行条件编译以在不使用某些代码时跳过它们。该项目是一个 MCU 项目,由 LED、LCD、键盘等外部模块组成。

我有一个optimization.h文件,用于告诉编译时使用了哪些模块。事情是这样的……

#ifndef OPTIMIZATION_H
#define OPTIMIZATION_H

// 1 - Compile code only for given modules
// 0 - Compile for all available modules
#define _OPTIMIZE_ 1

// Modules to compile
#define _LED_    1
#define _SWITCH_ 1

// Modules not to compile
#define _LCD_    0
#define _SSD_    0

#endif

code.c文件是这样的...

#include "optimization.h"
void myFun()
{
// Compile when LED is used or all modules are asked to use
// i.e when _OPTIMIZE_ is 0 or _LED_ is 1

// Need to compile this code
#if !(_OPTIMIZE_) || (_LED_)
/* My code goes here */
#endif

// Need to compile this code
#if !(_OPTIMIZE_) || (_SWITCH_)
/* My code goes here */
#endif

// Need not to compile
#if !(_OPTIMIZE_) || (_LCD_)
/* My code goes here */
#endif

// Need not to compile
#if !(_OPTIMIZE_) || (_SSD_)
/* My code goes here */
#endif
}

如果我只想使用 LED 和 SWITCH,则只需编译该部分代码。但是每次都会编译所有模块。可能是什么问题...

标签: cmicrocontroller

解决方案


恐怕您过于简化了您的问题,因此我们无法提供帮助。以下代码在我的机器上运行良好:

#include <stdio.h>
/*** from Optimize.h ***/

// 1 - Compile code only for given modules
// 0 - Compile for all available modules
#define _OPTIMIZE_ 1

// Modules to compile
#define _LED_    1
#define _SWITCH_ 1

// Modules not to compile
#define _LCD_    0
#define _SSD_    0

/*** from Code.c **/
int main()
{
// Need to compile this code
#if !(_OPTIMIZE_) || (_LED_)
    printf ("Module LED included\n");
#endif

// Need to compile this code
#if !(_OPTIMIZE_) || (_SWITCH_)
    printf ("Module SWITCH included\n");
#endif

// Need not to compile
#if !(_OPTIMIZE_) || (_LCD_)
    This line is invalid C code.
    printf ("Module LCD included\n");
#endif
}

此外,我建议重命名您的预处理器变量。而不是#if !(_OPTIMIZE_) || (_LCD_)难以阅读的,你应该写#if INCLUDE_ALL_MODULES || INCLUDE_LCD_MODULE。还可以考虑使用构造#define INCLUDE_LCD_MODULE (INCLUDE_ALL_MODULES | 1)


推荐阅读