Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串宏传递到C程序-跨平台_C_Linux_Windows_Macros - Fatal编程技术网

将字符串宏传递到C程序-跨平台

将字符串宏传递到C程序-跨平台,c,linux,windows,macros,C,Linux,Windows,Macros,我需要在编译时将字符串值传递给我的C程序: -DNAME=value 我知道两种方法:这里描述的字符串化: 这里的问题是字符串中的宏被替换了,因此当我的字符串包含-linux-时,它在linux上变成-1- 另一种方法是在传递时尝试正确引用字符串。我在Pythonsetup.py文件中执行此操作,如下所示: macros = [('NAME', '"value"')] 或同等地 -DNAME='"value"' 那我就 printf("%s\n", NAME); 但在Linux(gcc)

我需要在编译时将字符串值传递给我的C程序:

-DNAME=value
我知道两种方法:这里描述的字符串化:

这里的问题是字符串中的宏被替换了,因此当我的字符串包含
-linux-
时,它在linux上变成
-1-

另一种方法是在传递时尝试正确引用字符串。我在Python
setup.py
文件中执行此操作,如下所示:

macros = [('NAME', '"value"')]
或同等地

-DNAME='"value"'
那我就

printf("%s\n", NAME);
但在Linux(gcc)和Windows(Python2.7的MSVC9)上,我都找不到正确的方法

字符串可能包含
/
\
%
这一事实可能会使问题变得复杂,因此我需要进行一些转义


让我们回到
setup.py
,这就是它需要工作的地方

value = '"value"'   # works on Linux but not Windows
value = '\\"value\\"'   # works on Windows but not Linux

由于我使用Python,我可以手动处理平台细节:

value = 'my/complicated%/string'
quoted_value = '"{}"'.format(value)
if sys.platform.startswith('win32'):
    quoted_value = quoted_value.replace('%', '%%')
    quoted_value = quoted_value.replace('"', '\\"')

更多的特殊字符会使这一点更加复杂。

为什么不简单地将宏定义为字符串?就像
-DNAME=“value”
(注意双引号)。这是上面的第二种方法。我必须执行
-DNAME='“value”
。但它在Windows上似乎不起作用。删除单引号,保留双引号。这甚至无法编译。引号不会通过shell传递。当然,在shell中,您需要转义引号:
-DNAME=\“value\”
。仍然没有单引号,只有反斜杠和双引号。
value = 'my/complicated%/string'
quoted_value = '"{}"'.format(value)
if sys.platform.startswith('win32'):
    quoted_value = quoted_value.replace('%', '%%')
    quoted_value = quoted_value.replace('"', '\\"')