小编Neo*_*ard的帖子

为CLion分析器定义预处理器符号

在我的项目中,有一个ifdef预处理器指令中包含的文件

#ifdef SOME_SYMBOL
... entire file ...
#endif
Run Code Online (Sandbox Code Playgroud)

SOME_SYMBOL由在此之前编译的另一个文件定义,并且代码按预期工作,但静态分析器不知道此符号,因此它对待SOME_SYMBOL未定义.整个文件没有语法突出显示,只是跳过了一些分析(例如语法错误突出显示).

有没有办法告诉分析器将此符号视为已定义,而不在CMakeLists.txt中定义它?

我没有在CMakeLists.txt中定义SOME_SYMBOL的选项,因为项目依赖于它在某些编译路径中未定义(更改这几乎是不可能的).

更新:
似乎这是目前JetBrains的一个未解决的问题.见问题CPP-2286

preprocessor analysis clion

13
推荐指数
2
解决办法
2635
查看次数

为什么我需要引用一个我没有直接使用的dll?

我有从外部开发人员那里收到的源代码,这个代码分为4种类型的项目:他们的框架,我的项目的环境(让我们称之为"ENV"),应用程序库(称之为"Base")和应用程序本身(约20个dll我将统称为"App").

现在,我已经为这个混乱添加了另一层,一个名为AdvanceFeatures的dll.它位于ENV(框架顶部)的正下方.这个dll只引用框架,ENV引用它.只有ENV使用这个AdvanceFeatures dll,而Base和App只使用ENV.

我在这里工作的方式是App中的大多数对象都在Base中定义,并在ENV中继承/实现类/接口.这些对象中的一小部分(在App和Base中)从框架本身继承/实现类/接口(但这种情况非常罕见).

除了一个事实,到目前为止一切都很顺利.编译器要求我将从App中的每个dll和Base中添加对AdvanceFeatures dll的引用.

我没有在ENV之外使用AdvanceFeatures,那么为什么需要这些引用呢?

编辑:我已经为这个问题创建了一个演示项目.这是项目细节:

Assembly: AdvanceFeatures
References: Nothing (Reference project-folder is empty)
Classes: Decorator, IEnvClass, IDecorator
IDecorator contents:
namespace AdvanceFeatures
{
    public interface IDecorator
    {
        IEnvClass Decorated { get; }
        void Decorate();
    }
}

IEnvClass contents: 
namespace AdvanceFeatures
{
    public interface IEnvClass
    {
        string Name { get; set; }
    }
}

Decorator contents:
namespace AdvanceFeatures
{
    public class Decorator : IDecorator
    {

        public Decorator(IEnvClass decorated)
        {
            Decorated = decorated;
        }

        #region Implementation of IDecorator

        public IEnvClass …
Run Code Online (Sandbox Code Playgroud)

c# inheritance reference

8
推荐指数
2
解决办法
3590
查看次数

如何将Ant编译器更改为JDK 1.6

我需要编译我的源代码以与jre 1.6兼容.但是,当我尝试将javac任务的编译器属性设置为javac1.6时,ant仍将使用javac1.7编译我的代码.我也尝试将编译器版本设置为"现代",但没有帮助.

<target name="compile-tests">
    <javac compiler="javac1.6" includeantruntime="false" srcdir="${test.dir}"
     destdir="${build.dir}" >
        <classpath refid="class.path" />
    </javac>
</target>
Run Code Online (Sandbox Code Playgroud)

我的JAVA_HOME设置为JDK 1.6:

echo $JAVA_HOME </code> gives: <code>
/usr/lib/jvm/java-6-openjdk-amd64/
Run Code Online (Sandbox Code Playgroud)

我的ant版本是:Apache Ant(TM)版本1.8.2

根据这篇文章,ant使用自己的编译器.如何覆盖ant默认值?另外,根据这篇文章和ant文档,我可以设置全局build.compiler属性.我该怎么设置该属性,我该怎么做?

java ant

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

在 PT_GNU_STACK 程序头上设置执行位时,为什么进程的所有段都变为可执行

在控制段上的可执行位的过程中,我发现了PT_GNU_STACK加载程序如何使用的一个巨大的怪癖。

根据elf(5)联机帮助页,PT_GNU_STACK用作:

GNU 扩展,Linux 内核使用它通过 p_flags 成员中设置的标志来控制堆栈的状态。

execstack手册页,也支持这一点:

... ELF 二进制文件和共享库现在可以标记为需要或不需要可执行堆栈。此标记是通过 PT_GNU_STACK 程序头条目中的 p_flags 字段完成的。

但是,除了设置堆栈可执行文件之外,当我设置该位时,几乎所有段都变为可执行文件。

例如,当我运行时sleep,我得到了这个内存映射

sleep 100 & cat /proc/$!/maps
[1] 1260
561460d8d000-561460d94000 r-xp 00000000 08:01 524383                     /bin/sleep
561460f94000-561460f95000 r--p 00007000 08:01 524383                     /bin/sleep
561460f95000-561460f96000 rw-p 00008000 08:01 524383                     /bin/sleep
561462eca000-561462eeb000 rw-p 00000000 00:00 0                          [heap]
7f02b08b9000-7f02b0b97000 r--p 00000000 08:01 1966102                    /usr/lib/locale/locale-archive
7f02b0b97000-7f02b0d7e000 r-xp 00000000 08:01 655384                     /lib/x86_64-linux-gnu/libc-2.27.so
7f02b0d7e000-7f02b0f7e000 ---p 001e7000 08:01 655384                     /lib/x86_64-linux-gnu/libc-2.27.so
7f02b0f7e000-7f02b0f82000 r--p …
Run Code Online (Sandbox Code Playgroud)

linux glibc elf ld

5
推荐指数
1
解决办法
174
查看次数

C#编译器功能还是让我失去理智?

在重写我的事件调用函数以一般地处理事件及其参数之后,我开始检查我的代码(以匹配更改),并且我注意到编译器隐式地进行了泛型调用.

这是我的功能:

private void InvokeEvent<TArgs>(EventHandler<TArgs> invokedevent, TArgs args) 
    where TArgs : EventArgs
    {
        EventHandler<TArgs> temp = invokedevent;
        if (temp != null)
        {
            temp(this, args);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是调用函数的行:

InvokeEvent(AfterInteraction, result);
Run Code Online (Sandbox Code Playgroud)

这编译没有问题,智能感知甚至显示"正确"调用(与部分).

这是一个编译器功能(通用类型实际上可以直接从第二个参数推断出来),还是我疯了什么都没有,并且忽略了这一点?

c# generics implicit-typing

2
推荐指数
1
解决办法
142
查看次数

标签 统计

c# ×2

analysis ×1

ant ×1

clion ×1

elf ×1

generics ×1

glibc ×1

implicit-typing ×1

inheritance ×1

java ×1

ld ×1

linux ×1

preprocessor ×1

reference ×1