2016-10-21 7 views
2

私はコンパイル時に私のCプログラムに文字列値を渡す必要がある文字列化をここで説明する: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-含まれているように私はここにある問題は、文字列の中のマクロが置換されているということです。

もう1つの方法は、渡すときに文字列を正しく引用しようとすることです。私はちょうど

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

その後

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

または同等

-DNAME='"value"' 

をしかし、私はこれを行うための方法を見つけることができません。次のように私は、Python setup.pyファイルからこれをやっていますLinux(gcc)とWindows(Python 2.7のMSVC 9)の両方で正しく動作します。

これは、文字列に/,\または%が含まれている可能性がありますので、いくつかエスケープする必要があります。


この問題を解決するには、setup.pyに戻してください。

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

単にマクロを文字列として定義するのはなぜですか? '-DNAME =" value "'と同じです(二重引用符に注意してください)。 –

+0

これは上記の2番目の方法です。 '-DNAME = '" value "''を実行する必要があります。しかし、Windowsでは動作しないようです。 – wrgrs

+1

一重引用符を削除し、二重引用符を保持します。 –

答えて

0

私はPythonでてるので、私は手動で、プラットフォームの仕様を扱うことができます。

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

さらに特殊文字は、これをさらに複雑になります。

関連する問題