我有以下的C程序:GCC:-DVAR = -linux無法正常運行在Linux上
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上,所有東西都可以正常工作。 我不知道它是一個錯誤還是我做錯了什麼。
可能與擴展的'linux'宏有衝突。 –
這個宏的目的是什麼?它應該解決的實際問題是什麼?也許你應該將宏擴展定義爲一個字符串開始? –
我有'-linux'裏面的路徑,我通過'-D',所以我無法避免它。 – ziomq1991