首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在编辑标头时处理编译时间

在编辑标头时处理编译时间
EN

Stack Overflow用户
提问于 2014-06-10 12:18:23
回答 1查看 153关注 0票数 2

我正在做一个巨大的项目,它使用一个系统,当运行make时,生成一些头文件,其中包含一些常量,这些常量在代码中随处可见。由于该项目的规模,如果其中一个头文件被更改(删除一个常量或添加另一个常量),几乎整个项目都必须重新编译(有时需要几个小时)。

我最初的解决方案是编写某种类型的ConstantManager类,该类具有每个代码-值对的映射,以及一个getter方法,它将给定的代码作为字符串返回其值来返回(相当直接),并更改头生成器,以便它将常量定义为#define,扩展为ConstantManager的实例并调用getter。这样做的问题是它不能与switch语句一起工作(好吧……case语句),因为返回值不是常量表达式。

我的问题是:这个问题有没有替代的解决方案,或者让我的交换机工作的技巧?

EN

回答 1

Stack Overflow用户

发布于 2014-06-10 13:27:08

您可以将大标题拆分为较小的标题,并包括这些标题。这可能是大量的初始工作,但这是最直接的,并且可能与您当前的解决方案兼容。

另一种选择是创建,以使您的ConstManager类具有常量表达式成员。为此,您不需要太多,但您不能使用map。

ConstManager.h

代码语言:javascript
运行
AI代码解释
复制
namespace ConstManager {

  namespace detail {
    struct Constant {
      char const * const name;
      char const * const value;
    };


    Constant const * const constants;
    unsigned int total_variables;
  }

  inline char const * const ConstManager::get(char const * needle) constexpr {
    using namespace ConstManager::detail;
    /* i was not able to quickly find a constexpr compatible binary search function*/
    if(int i = 0;  i < total_variables; ++i){
      Constant & const c = constants[i];
      if(strcmp(c.name, needle) == 0){
        return c.value;
      }
    }
    return nullptr;
  }
}

应生成ConstManager.c

代码语言:javascript
运行
AI代码解释
复制
ConstManager::detail::Constant ConstManager::detail::constants [] = {
  {"first var", "first value"},
  {"second var", "second value"}
};

unsigned int ConstManager::detail::total_variables = 2;

建议的第一个解决方案(这是在第一次编辑之前):

我认为你应该用常规的外部变量来代替你所有的定义。

尽管有两点需要注意:

  1. 如果这些定义用于连接字符串,它将不起作用
  2. 它可能会使内联变得更加困难,如果不是不可能的话,但如果这很重要,只有探查器可以判断。

constmgr.h

代码语言:javascript
运行
AI代码解释
复制
  // make all your needed constansts externs
  namespace Constants {
    extern int const theFirstConstant;
    extern char const * const someStringConstant;
  }

然后在构建时生成源文件。

constexpr.cpp

代码语言:javascript
运行
AI代码解释
复制
 int const Constants::theFirstConstant = 1000;
 char const * const Constants::someStringConstant = "hihihoho";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24140792

复制
相关文章
通过主机标头的 XSS
在 IE 中处理重定向时有一个有趣的错误,它可以将任意字符插入到 Host 标头中。假设您有以下 http 响应:
Khan安全团队
2022/01/11
1.7K0
通过 HTTP 标头的 XSS
在某些情况下,在应用程序的一个 HTTP 标头中传递的信息未正确清理,并在请求页面的某处或另一端输出,从而导致 XSS 情况。
Khan安全团队
2022/03/09
2.2K0
【Groovy】编译时元编程 ( 编译时处理 ASTTransformation 接口实现 | 配置 ASTTransformation )
声明 ASTTransformation 接口子类 , 并使用 @GroovyASTTransformation 注解修饰该类 ; 在实现的 void visit(ASTNode[] nodes, SourceUnit source) 方法中进行编译时处理 ;
韩曙亮
2023/03/30
3810
【Groovy】编译时元编程 ( 编译时处理 ASTTransformation 接口实现 | 配置 ASTTransformation )
设置和获取HTTP标头
%Net.HttpRequest的以下每个属性都包含具有相应名称的HTTP标头的值。如果不设置这些属性,则会自动计算它们:
用户7741497
2022/06/09
2.5K0
常见的HTTP标头介绍
在网络爬虫的实践过程中会遇到诸多挑战,被屏蔽是最令人头疼的一个。幸好,有许多技术可以帮助您免受IP屏蔽带来的影响,这其中,HTTP标头(HTTP Headers)的使用和优化是最有效的方法之一,但它往往也是最被大家低估的方法之一。
用户7850017
2022/05/07
1.2K0
常见的HTTP标头介绍
java8时间处理
/** * Instant:瞬时实例 * LocalDate:本地日期 不包含具体时间 例如 2020-02-02 可以用来记录纪念日 * LocalDTime:本地时间 不包含日期 * LocalDateTime:结合了日期和时间 但不包含时差和时区 * ZonedDateTime:完整的日期时间,包含时区和相对UTC或格林威治的视察 * * ZoneOffSet,ZoneId:操作时区 * * DateTime
海向
2020/05/31
8480
【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )
命令 , 编译 ASTTransformation 实现类 ; 编译后会在 Y:\002_WorkSpace\003_IDEA\Groovy_Demo2\src\main\groovy\classes 目录生成 MyASTTransformation.class 文件 ;
韩曙亮
2023/03/30
4620
【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )
【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )
上一篇博客 【Android APT】编译时技术 ( ButterKnife 原理分析 ) 简单介绍了下编译时技术 , 并简单分析了 ButterKnife 的实现原理 ;
韩曙亮
2023/03/29
4020
【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 )
PL/SQL 包编译时hang住的处理
       最近PL/SQL包在编译时被hang住,起初以为是所依赖的对象被锁住。结果出乎意料之外。下面直接看代码演示。
Leshami
2018/08/14
8990
Java JDK1.8时间处理
优势:相对于Date、Calendar更加安全而且api更加丰富,对日期时间的操作更加容易,非常值得一试。
收心
2022/08/01
6250
【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 )
在之前的 " 【Groovy】MOP 元对象协议与元编程 " 系列博客中 , 都是围绕 MetaClass 的 " 运行时元编程 " , 其在运行时才进行相关的元编程操作 , 如方法注入 , 方法委托等 ;
韩曙亮
2023/03/30
5480
【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 )
Log4Shell HTTP 标头注入
此模块需要 Metasploit:https://metasploit.com/download
Khan安全团队
2022/01/14
1.1K0
「HTTP标头」都给你整理好了
HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍
Java3y
2020/02/19
5.9K0
「HTTP标头」都给你整理好了
clion连接远程编译环境开发时,头文件标红的解决方法
今天连接远程编译环境开发的时候,clion里面,头文件突然就都标红了,但是能正常编译。出现这样的情况,原因是clion缓存的symbol以及头文件信息与远程的不一致。因此我们需要让clion重新从远程环境拉取就行。
灯珑LoGin
2022/10/31
4.4K0
clion连接远程编译环境开发时,头文件标红的解决方法
【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( 升级支持库时处理 @NonNull 参数 )
此处继承了 RecyclerView.ItemDecoration 类 , 重写了 getItemOffsets 方法 ,
韩曙亮
2023/03/29
2.2K0
【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( 升级支持库时处理 @NonNull 参数 )
ISO8601时间字符串到时间戳处理
作者:matrix 被围观: 8,903 次 发布时间:2019-06-21 分类:Python 兼容并蓄 | 无评论 »
HHTjim 部落格
2022/09/26
1.7K0
【Android APT】编译时技术 ( 开发编译时注解 )
上一篇博客 【Android APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 ) 中创建并配置了 annotation 编译时注解 依赖库 和 annotation-compiler 注解处理器 依赖库 ;
韩曙亮
2023/03/29
2900
【Android APT】编译时技术 ( 开发编译时注解 )
C++ 中的随机标头系列1
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
鲸落c
2022/11/28
1.4K0
C++ 中的随机标头系列1
在 MySQL 中处理日期和时间(三)
在本系列关于日期和时间的前两部分中,我们介绍了 MySQL 的五种时态数据类型。现在是时候将注意力转移到 MySQL 的许多面向日期或时间的函数了。
MySQL技术
2022/06/08
3.9K0
在 MySQL 中处理日期和时间(三)
在 MySQL 中处理日期和时间(四)
在这个关于日期和时间的系列中,我们探索了 MySQL 的五种时态数据类型,以及它的许多面向日期或时间的函数中的一些。在本文中,我们将介绍在 MySQL 中创建日期和时间的几种方法。
MySQL技术
2022/06/08
4K0
在 MySQL 中处理日期和时间(四)

相似问题

编辑XamDataGrid标头

10

编译LLVM IR时使用LLVM标头

140

编译桥接标头时的错误

24

在转发前编辑HTTP标头

11

编辑MultiPartEntity的标头

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档