g ++命令行宏定义字节流

时间:2017-10-17 15:01:20

标签: c++ gcc macros g++ sh

我正在寻找通过选项-D从gcc / g ++命令行将字节流定义为宏的解决方案,例如-Dxxx = byte_stream。

以下是代码段

#ifndef MAGIC_BYTES
#define MAGIC_BYTES "\x01\x02\x00\x00\xa0\xb0"
#endif

我希望每次可以在不编辑源代码的情况下重新编译代码,但使用-DMAGIC_BYTES = xxx来定义字节流。

我知道编辑源代码可能是解决方案,但只是想知道如何从命令行定义这样的字节流。

UPDATE,

我在下面列出了这个问题的简单代码,

/* When
 * compile: gcc -o macro ./macro.c
 * output: 0x1, 0x2, 0x3, 0x4, 0x5,
 *
 * compile: gcc -o macro -DMAGIC_BYTES=\"\xa1\xa2\xa3\xa4\xa5\" ./macro.c
 * output: 0x78, 0x61, 0x31, 0x78, 0x61, 
 * but I expect 0xa1, 0xa2, 0xa3, 0xa4, 0xa5
 */
#include <stdio.h>

#ifndef MAGIC_BYTES
#define MAGIC_BYTES "\x01\x02\x03\x04\x05"
#endif

int main()
{
    char buf[] = { MAGIC_BYTES };
    for (int i = 0; i < 5; ++i)
        printf("%#x, ", buf[i]);
    printf("\n");
    return 0;
}

1 个答案:

答案 0 :(得分:1)

首先,这取决于您的环境以及您正在使用的shell。对于/bin/sh,您可以尝试类似

的内容
-DMAGIC_BYTES='"\x01\x02"'

''转义整个字符串。