我需要在编译时将字符串值传递到我的 C 程序中:
-DNAME=value
我知道有两种方法可以做到这一点: 字符串化,如下所述:https://gcc.gnu.org/onlinedocs/cpp/Stringification.html https://gcc.gnu.org/onlinedocs/cpp/Stringification.html
#define xstr(s) str(s)
#define str(s) #s
...
printf("%s\n", xstr(NAME));
我这里遇到的问题是字符串内的宏被替换,所以当我的字符串包含-linux-
它成为了-1-
在Linux上。
另一种方法是在传递时尝试正确引用字符串。我正在用Python做这个setup.py
文件如下:
macros = [('NAME', '"value"')]
或同等地
-DNAME='"value"'
然后我就
printf("%s\n", NAME);
但我找不到在 Linux (gcc) 和 Windows (MSVC 9 for Python 2.7) 上正确执行此操作的方法。
由于字符串可能包含以下事实,这可能会变得复杂/
, \
or %
所以我需要做一些转义。
让我们回到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('"', '\\"')
更多特殊字符会使情况变得更加复杂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)