小编Tho*_*ers的帖子

我应该使用#define,enum还是const?

在我正在研究的C++项目中,我有一个标志值,它可以有四个值.这四个标志可以组合在一起.标志描述数据库中的记录,可以是:

  • 新纪录
  • 删除记录
  • 修改记录
  • 现有记录

现在,对于我希望保留此属性的每条记录,我可以使用枚举:

enum { xNew, xDeleted, xModified, xExisting }
Run Code Online (Sandbox Code Playgroud)

但是,在代码的其他地方,我需要选择哪些记录对用户可见,所以我希望能够将其作为单个参数传递,如:

showRecords(xNew | xDeleted);
Run Code Online (Sandbox Code Playgroud)

所以,似乎我有三个可能的附件:

#define X_NEW      0x01
#define X_DELETED  0x02
#define X_MODIFIED 0x04
#define X_EXISTING 0x08
Run Code Online (Sandbox Code Playgroud)

要么

typedef enum { xNew = 1, xDeleted, xModified = 4, xExisting = 8 } RecordType;
Run Code Online (Sandbox Code Playgroud)

要么

namespace RecordType {
    static const uint8 xNew = 1;
    static const uint8 xDeleted = 2;
    static const uint8 xModified = 4;
    static const uint8 xExisting = 8;
}
Run Code Online (Sandbox Code Playgroud)

空间要求很重要(字节与整数),但并不重要.使用定义我失去了类型安全性,并且enum我失去了一些空间(整数),并且当我想要进行按位操作时可能需要进行转换.随着 …

c++ enums bit-manipulation c-preprocessor

123
推荐指数
6
解决办法
6万
查看次数

缩进#defines

我知道#defines等通常不会缩进.为什么?

我正在使用一些代码,其中包含#defines,#ifdefs,#elses,#endifs等的可怕混合.所有这些通常与正常的C代码混合在一起.#defines 的非缩进使它们难以阅读.缩进代码与非缩进#defines的混合是一场噩梦.

不缩进#define的好处是什么?如果我缩进它会不会让我成为一个坏人?这不是更好吗?

#ifdef SDCC
    #if DEBUGGING == 1
        #if defined (pic18f2480)
            #define FLASH_MEMORY_END 0x3DC0
        #elif defined (pic18f2580)
            #define FLASH_MEMORY_END 0x7DC0
        #else
            #error "Can't set  up flash memory end!"
        #endif
    #else
        #if defined (pic18f2480)
            #define FLASH_MEMORY_END 0x4000
        #elif defined (pic18f2580)
            #define FLASH_MEMORY_END 0x8000
        #else
            #error "Can't set  up flash memory end!"
        #endif
    #endif
#else
    #if DEBUGGING == 1
        #define FLASH_MEMORY_END 0x7DC0
    #else
        #define …
Run Code Online (Sandbox Code Playgroud)

c coding-style code-formatting indentation c-preprocessor

95
推荐指数
5
解决办法
2万
查看次数

为什么大多数C开发人员使用define而不是const?

在许多程序中,a #define用作与常量相同的目的.例如.

#define FIELD_WIDTH 10
const int fieldWidth = 10;
Run Code Online (Sandbox Code Playgroud)

我通常认为第一种形式优先于另一种,依靠预处理器来处理基本上是应用程序的决定.这个传统有原因吗?

c coding-style c-preprocessor

90
推荐指数
5
解决办法
2万
查看次数

在Objective-C中#define vs const

我是Objective-C的新手,我有一些关于const和预处理指令的问题#define.

首先,我发现无法使用定义常量的类型#define.这是为什么?

第二,使用其中一个比另一个更有优势吗?

最后,哪种方式更有效和/或更安全?

const objective-c c-preprocessor

81
推荐指数
4
解决办法
8万
查看次数

正确的LaTeX文档的字数

我正在搜索为LaTeX文档执行正确字数的应用程序或脚本.

到目前为止,我只遇到过只能处理单个文件的脚本,但我想要的是一个可以安全地忽略LaTeX关键字并遍历链接文件的脚本...即关注\include\input链接以生成正确的字数整个文件.

使用vim,我目前使用ggVGg CTRL+G但显然显示当前文件的计数,并且不会忽略LaTeX关键字.

有谁知道任何可以完成这项工作的脚本(或应用程序)?

latex word-count

69
推荐指数
5
解决办法
7万
查看次数

sizeof(enum)== sizeof(int),总是吗?

sizeof(enum)== sizeof(int),总是吗?

  • 还是编译器依赖?
  • 这是错误的,因为编译器针对字长度(内存对齐)进行了优化,即y int是特定编译器上的字大小?如果我使用枚举,这是否意味着没有处理惩罚,因为它们将是字对齐的?
  • 如果我将所有返回代码放在枚举中是不是更好,因为我显然不担心它获得的值,只检查返回类型时的名称.如果是这种情况,#DEFINE会更好,因为它可以节省内存.

通常的做法是什么?如果我必须通过网络传输这些返回类型,并且必须在另一端完成某些处理,那么您更喜欢枚举/ #define/const ints.

编辑 - 只是检查网络,因为编译器不象征性地链接宏,人们如何调试,比较整数值与头文件?

来自答案 - 我在下面添加这一行,因为我需要澄清 -

"因此它是实现定义的,而sizeof(枚举)可能等于sizeof(char),即1."

  • 这是否意味着编译器检查枚举中的值范围,然后分配内存.我不这么认为,当然我不知道.有人可以解释一下"可能是什么".

c enums const c-preprocessor

58
推荐指数
4
解决办法
6万
查看次数

MongoDB Opensource与MongoDB Enterprise

您能否就在Opensource和Enterprise MongoDB之间进行选择提出建议.现在的要点是:

  1. 记忆限制
  2. 存储限制
  3. 故障转移
  4. 可扩展性

在这一点上,开源和企业MongoDB之间有什么区别吗?

您能否澄清一下有关License Commercial和GNU AGPL v3.0之间区别的一个更重要的观点.对于Mongo?

enterprise mongodb

56
推荐指数
3
解决办法
8万
查看次数

我是否更喜欢常量而不是定义?

在C中,我是否更喜欢常量而不是定义?我最近阅读了很多代码,所有的例子都大量使用了定义.

c const c-preprocessor

46
推荐指数
5
解决办法
4342
查看次数

改进Scala的JVM

对JVM的哪些更改最有利于Scala编译器和运行时?

通过引入InvokeDynamic计划到达JVM 7 的字节代码,动态语言将在性能上受益匪浅,Scala可能会受益于尾递归(不确定它是否会出现在JVM 8或更高版本中).

Scala及其现有功能集可以从JVM中获益吗?这些变化即将到来吗?

具体来说,JVM是否会对闭包和函数作为对象提高性能?

jvm scala

43
推荐指数
3
解决办法
2012
查看次数

Spring Security:注销时为404

当我尝试访问我的spring应用程序的注销URL时,我收到404错误并No mapping found for HTTP Request with URI [/logout] in DispatcherServlet with name 'mvc-dispatcher'在我的服务器日志中.

我已经尝试过调用j_spring_security_logout无法正常工作,Spring安全注销问题以及SO上的所有相关结果.

我包含了完整的配置文件,因为我还不太清楚Spring xml结构.

我的安全配置:

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security.xsd">

    <http pattern="/resources/**" security="none" />

    <http auto-config="true">
        <intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <intercept-url pattern="/**" access="ROLE_USER" />
        <form-login login-page="/login" default-target-url="/"/>
        <logout logout-url="/logout" />
        <csrf />
    </http>

    <global-method-security secured-annotations="enabled" />

    <authentication-manager>
        <authentication-provider user-service-ref="userDetailsService" />
    </authentication-manager>

</beans:beans>
Run Code Online (Sandbox Code Playgroud)

我的web.xml是这样的:

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <display-name>XYZ</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/*-config.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> …
Run Code Online (Sandbox Code Playgroud)

java spring-mvc spring-security

29
推荐指数
3
解决办法
2万
查看次数