c - 使用时仅编译代码的特定部分
问题描述
我必须进行条件编译以在不使用某些代码时跳过它们。该项目是一个 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,则只需编译该部分代码。但是每次都会编译所有模块。可能是什么问题...
解决方案
恐怕您过于简化了您的问题,因此我们无法提供帮助。以下代码在我的机器上运行良好:
#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)
。
推荐阅读
- python - 你可以在 python 的列表理解中使用 ifinstance 吗?
- android - 如何将意图从适配器类传递给其他活动,但我的变量在其他活动中
- java - 将文件上传到存储位置
- html - VueJS 部署的生产版本显示损坏的 png 图像
- typescript - TypeScript 枚举值作为类型化数组
- c++ - 我可以返回 std::thread
- android - 跨模块共享 uploadArchives 任务
- r - R中具有相似名称的变量的累积和
- r - RStudio 生成一个没有错误的 TeX 文件,只是警告,但在显示 PDF 时失败
- javascript - 如何从带有 sfref 的标签中解析链接 url?