当我尝试在 Emacs 24.2.1 下对 csharp-mode 进行字节编译时,出现以下错误:

csharp-mode.el:2028:1:Error: Symbol's value as variable is void: csharp-enum-decl-re

This post 确认了同样的编译问题并提供了以下补救措施:



这个补救措施对我也有效!但是,这种补救措施给我留下了几个问题:
  • 没有预先定义 csharp-enum-decl-re ,为什么 csharp-mode.el 字节编译失败? (请参阅 csharp-mode.el 源代码的第一个链接。)
  • 在不修改 csharp-mode.el 的情况下,是否有更好的解决方法来解决这个编译问题?
  • 第 2028 行 指示的错误与以下定义有关。 csharp-enum-decl-re 的依赖在哪里?

  • (defconst csharp-font-lock-keywords-2 (c-lang-const c-matchers-2 csharp)
      "Fast normal highlighting for C# mode.")
    

    最佳答案

    尽我所知:

  • 该文件无法字节编译,因为宏需要尚 undefined symbol 值。这个错误会传染给一些程序员,因为他们正在使用 emacs session 进行开发,在那里他们已经评估了他们正在编写的一些代码。编译错误的典型解决方案是对那些在编译时需要知道的表达式使用 eval-and-compile 宏。
  • eval-buffer 之前使用 byte-compile 是一种避免修改源代码的解决方法。编写补丁并将其发送给作者是另一种选择。
  • 代码相对复杂,因为它严重依赖宏。 c-lang-defconst 假设为 c-matchers-1c-matchers-2c-matchers-3 定义值,但对于 c-matchers-2 需要 csharp-enum-decl-re 的值(参见第 1304 行)。请注意,符号的名称 (c-matchers-*) 是由 c-lang-defconst 宏本身创建的。
  • 关于c# - Emacs 'csharp-mode' 字节编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20528989/

    10-11 03:35