我需要在编译时将一个字符串值传递到我的C程序中:
-DNAME=value
我知道两种方法可以做到这一点:如此描述的字符串化:https://gcc.gnu.org/onlinedocs/cpp/Stringification.html
#define xstr(s) str(s)
#define str(s) #s
...
printf("%s\n", xstr(NAME));
我在这里遇到的问题是,字符串中的宏被替换了,因此我的字符串包含
-linux-
时,在Linux上就变成了-1-
。另一种方法是在传递时尝试正确引用字符串。我是通过Python的
setup.py
文件来实现这个目的的:macros = [('NAME', '"value"')]
或等价于
-DNAME='"value"'
然后我只是 <\p>
printf("%s\n", NAME);
但我无法找到一个正确的方法在Linux(gcc)和Windows(MSVC 9 for Python 2.7)上做到这一点。
由于字符串可能包含/
、\
或%
,因此我需要进行一些转义处理。
让我们把这个问题带回到setup.py
中,因为这是需要解决的地方。
value = '"value"' # works on Linux but not Windows
value = '\\"value\\"' # works on Windows but not Linux
-DNAME="value"
(注意双引号)。 - Some programmer dude-DNAME='"value"'
。但在Windows上似乎不起作用。 - wrgrs-DNAME=\"value\"
。仍然没有单引号,但是有反斜杠和双引号。 - Some programmer dude