标签: preprocessor

Erlang宏与不同的arity

对于我的日志记录,我希望能够在编译时宏指令语句,所以 - 定义为救援!

对于我正在使用erlc -DFOO编译的编译器标志,有没有办法让-ifdef来确定FOO = ok,FOO/0和FOO/1之间的区别?

-module(foo).

-define(FOO, ok).
-define(FOO(X), io:format("~p~n", [X])).

-export([test_x/1]).

%% i want this to be true iff FOO = ok, not if ?FOO/1 exists
-ifdef(FOO).
test_x(X) ->
    ?FOO(":) " ++ X).
-else.
test_x(X) ->
    ?FOO(":( " ++ X).
-endif.
Run Code Online (Sandbox Code Playgroud)

erlang preprocessor

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

致命错误LNK1112:模块机器类型'X86'与目标机器类型'x64'冲突

我使用Visual Studio 2010 Premium.我有两个项目A和B,我尝试将它们编译为64位平台.
项目A输出项目B依赖的.dll和.lib文件.
我已经成功地将项目A编译到64位平台,但是当我编译项目BI时会出现以下错误:

mfcs100d.lib(nolib.obj):致命错误LNK1112:模块机器类型'X86'与目标机器类型'x64'冲突

可能是什么问题呢 ?我真的不知道这个mfcs100d.lib文件是什么.
我在项目A的dll文件上使用了"Dependency Walker",它似乎完全依赖于64位dll文件.另外,我进入了项目B(属性页 - >配置属性 - >链接器 - >高级)并确认'目标机'设置为"MachineX64".此外,在配置管理器上,平台设置为x64.

有人告诉我问题可能是这样的:

转到项目B(属性页 - >配置属性 - > C\C++ - >预处理器 - >预处理器定义)我有以下值:

WIN32  
_DEBUG  
_WINDOWS  
_AFXEXT  
Run Code Online (Sandbox Code Playgroud)

那是真的相关吗?我应该更换'WIN32'值吗?如果是的话,怎么样?我真的不明白这些定义的含义以及如何改变它们.

编辑:我刚刚意识到它可能完全不相关.这些只是预处理器的定义,例如可以通过C++ #define命令确定的定义.但我可能是错的.

64-bit preprocessor linker-errors visual-studio-2010

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

一种扩展java语法的简单方法

我想在java语法中进行一些更改.例如,我想使用运算符'+'来添加向量.所以我想要这个代码:

public class Vector2 {
    public float x, y;
    public Vector2(float x, float y) {this.x = x;this.y = y;}
    public String toString() {...}

    public static Vector2 operator+(Vector2 a, Vector2 b) {
        return new Vector2(a.x + b.x, a.y + b.y);
    }

    public static void main(String[] args) {
        Vector2 a = new Vector2(3, 6);
        Vector2 b = new Vector2(2, 8);
        System.out.println(a + b);
    }
}
Run Code Online (Sandbox Code Playgroud)

将被转换为这个标准的java代码:

public class Vector2 {
    public float x, y;
    public Vector2(float x, float y) {this.x …
Run Code Online (Sandbox Code Playgroud)

java preprocessor

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

使用UnitTest时找不到FacebookSDK/FacebookSDK.h

我有一个使用Facebook Framework的应用程序,它工作正常.我写了一个单元测试,当我运行它时,我收到这个错误:

Lexical or Preprocessor Issue - FacebookSDK/FacebookSDK.h file not found ProjectName-Prefix.pch
Run Code Online (Sandbox Code Playgroud)

为什么会在测试中发生,而不是在run/build/archive中?

更新:1)尝试始终使用用户...路径

2)清理工作区

他们都没有工作

xcode preprocessor unit-testing file-not-found

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

解析包含#(c预处理器)的haskell源文件时出错

解析包含#define和的haskell源文件时#if,parseFileContentsWithMode会混淆并抛出有关散列的错误.我想包括MagicHashCPP扩展名列表(extns见下文),但没有奏效.我无法真正更改源文件,因为它们有很多.

getModule extns filePath program = fromParseResult $ parseFileContentsWithMode mode program
                         where
                                  bangPatternsExt = map parseExtension extns
                                  mode = ParseMode filePath Haskell2010 bangPatternsExt False False 
Run Code Online (Sandbox Code Playgroud)

解析器失败了:

#if __GLASGOW_HASKELL__ >= 612

instance Lift ModName where
  lift = lift . modString
Run Code Online (Sandbox Code Playgroud)

preprocessor haskell

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

如何使用VSC浏览Linux内核源代码

我正在从Eclipse CDT转换。当使用预处理器定义(无论是在Makefile中明确指定还是通过外部自动生成的头文件包含在内)在C / C ++代码中浏览时,预处理器宏功能是必需的。如果没有这个,就无法导航Linux源代码,如本开创性的Wiki页面上有关使用Eclipse研究Linux代码所述。我正在寻找VSC的等效功能。希望有一个指针。

带问候

preprocessor visual-studio-code

1
推荐指数
3
解决办法
3595
查看次数

#defining在一个块内真的是代码味道吗?

我读到#defining和#undefining在一个块里面是代码味道.这是为什么?另外,我在代码中看到(只是一个显示我在实际代码中的内容的示例),这个编译,

if(x == 1000) {
    #define MACRO_EXAMPLE 1
} else {
    #define MACRO_EXAMPLE 1
}
Run Code Online (Sandbox Code Playgroud)

但这不编译,

if(x == 1000) {
    #define MACRO_EXAMPLE 1
} else {
    #define MACRO_EXAMPLE 2
}
Run Code Online (Sandbox Code Playgroud)

有错误 warning C4005: 'MACRO_EXAMPLE' : macro redefinition

这是如何预处理的?它是如何工作的?

c c++ macros preprocessor

1
推荐指数
3
解决办法
334
查看次数

在预处理程序指令中使用枚举值

我有以下代码:

#include <stdio.h>

enum {A, B};

#define C A

int main() {
#if C == B
  printf("%d==%d\n", C, B);
#else
  printf("%d!=%d\n", C, B);
#endif
}
Run Code Online (Sandbox Code Playgroud)

这令人惊讶地给出了输出:

0==1
Run Code Online (Sandbox Code Playgroud)

现在,我理解代码是错误的,因为预处理器不知道枚举值.我不明白为什么没有生成错误... A和B应该在预处理时间未定义,预处理器如何不给出错误?

c preprocessor

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

与 C 代码相比,为什么 C++ 代码不需要“#define _POSIX_C_SOURCE 200809L”?

当我使用“POSIX 间隔计时器”或进行信号处理时,我必须插入

#define _POSIX_C_SOURCE 200809L
Run Code Online (Sandbox Code Playgroud)

在我的任何文件中的第 1 行。但我发现只有 C 代码需要它,而不是 C++ 代码。

在这个问题上g++gcc编译器与编译器的工作方式有何不同?


下面是我的系统环境(gcc:相同版本)

 user@~ $ g++ --version
 g++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
 Copyright (C) 2015 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

我构建了在 CMakeLists.txt 中添加这一行的项目

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++14 -Wall")
Run Code Online (Sandbox Code Playgroud)

c c++ preprocessor

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

项目中多个包含相同的头文件:C vs C ++

在这里,我有一个示例项目,其中包含两个源文件和一个头文件,如下所示:

main.c:

#include<stdio.h>                                                               
#include "personal.h"                                                           
int main(){                                                                     
    i = 5;                                                                        
    printf("Value is %d\n",i);                                                    
    return 0;                                                                     
 }
Run Code Online (Sandbox Code Playgroud)

sub.c:

#include "personal.h"                                                           
// do nothing
Run Code Online (Sandbox Code Playgroud)

最后是personal.h:

#pragma once                                                                    
int i; 
Run Code Online (Sandbox Code Playgroud)

每个.c文件都包含personal.h,后者受“保护”。我用gcc编译,一切正常:

>gcc sub.c main.c -o out
>./out 
Value is 5
Run Code Online (Sandbox Code Playgroud)

但是对于g ++,会发生这种情况:

>g++ sub.c main.c -o out
/tmp/cctYwVnO.o:(.bss+0x0): multiple definition of `i'
/tmp/ccPElZ27.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

在文件链接方式,预处理器活动等方面,C ++和C之间在本质上有什么不同吗?我对其他编译器(如clang)尝试了相同的操作,并且发生了相同的情况。我也许在这里想念一些愚蠢的东西。

c c++ preprocessor compilation include

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