将stringmacros传递给C程序 – 跨平台

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

-DNAME=value 

我知道两种方式来做到这一点:如下所述的string化: https ://gcc.gnu.org/onlinedocs/cpp/Stringification.html

 #define xstr(s) str(s) #define str(s) #s ... printf("%s\n", xstr(NAME)); 

我在这里的问题是在string内的macros被replace,所以我的string包含-linux-它变成-1-在Linux上。

另一种方法是在传递时尝试正确地引用string。 我从一个Python setup.py文件如下所示:

 macros = [('NAME', '"value"')] 

或等同地

 -DNAME='"value"' 

那我就是

 printf("%s\n", NAME); 

但是我无法在Linux(gcc)和Windows(Python 2.7的MSVC 9)上find正确的方法。

这可能会因string可能包含/\%而变得复杂,所以我需要做一些转义。


让我们回到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('"', '\\"') 

更多的特殊字符会使这个更复杂。