gcc:-DVAR = -linux在linux

时间:2017-10-13 09:43:42

标签: c linux gcc

我有以下C程序:

test.c的

#include <stdio.h>
#define DEF0(v) #v
#define DEF(v) DEF0(v)

int main()
{
    printf("RUNNING... %s\n", DEF(VAR));
}

汇编

gcc -DVAR=-linux test.c

运行

./a.out

给出

RUNNING... -1

Asm输出

        .file   "test.c"
        .section        .rodata.str1.1,"aMS",@progbits,1
.LC0:
        .string "-1"
.LC1:
        .string "RUNNING... %s\n"
        .text
        .p2align 4,,15
.globl main
        .type   main, @function
main:
.LFB11:
        .cfi_startproc
        movl    $.LC0, %esi
        movl    $.LC1, %edi
        xorl    %eax, %eax
        jmp     printf
        .cfi_endproc
.LFE11:
        .size   main, .-main
        .ident  "GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-4)"
        .section        .note.GNU-stack,"",@progbits

-linu-linuxx不会导致此类问题,但-linux/会造成此问题。引号-DVAR="-linux"周围没有帮助。

在gcc 6和7上也可以看到问题。在cygwin上,每个人的工作都很精细。 我想知道这是一个错误还是我做错了什么。

1 个答案:

答案 0 :(得分:2)

在编译目标文件时,可以使用-undef禁止系统或gcc特定宏的定义:

gcc -undef -c -DVAR=-linux test.c
gcc test.o -o test

然后你的宏应该按预期工作。 但请注意,您不能使用任何这些预定义的宏,您应该只在那些必须使用的目标文件上使用它。