2013-11-08 2 views
1

Видимо, команда лязг/llvc каст не поддерживает оператор ##Препроцессор LLVM, по-видимому, не поддерживает ## operator?

Код

[email protected]:$ more x.c 
#define foo(a,b) (a ## b) 

foo(one,two) 

На OSX 10.8 Я получаю

osx108 stefanoborini$ cpp --version 
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn) 
Target: x86_64-apple-darwin12.5.0 
Thread model: posix 
osx108 stefanoborini$ cpp x.c 
# 1 "x.c" 
# 1 "<built-in>" 1 
# 1 "<built-in>" 3 
# 161 "<built-in>" 3 
# 1 "<command line>" 1 
# 1 "<built-in>" 2 
# 1 "x.c" 2 


(one ## two) 

В Linux я получаю

[email protected]:$ cpp --version 
cpp (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 
Copyright (C) 2011 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

[email protected]:$ cpp x.c 
# 1 "x.c" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "x.c" 


(onetwo) 

Есть ли переключатель cpp, который позволяет использовать оператор ## в llvm?

+0

возможно дубликат [О ## препроцессора в C] (http://stackoverflow.com/questions/11037153/about-preprocessor-in-c) – trojanfoe

ответ

1

лязг-х cpp является предварительной обработкой в ​​режиме traditional-cpp, где stringification # и токен-склеивание ##has no meaning.

$ cpp -### 1.c 
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn) 
Target: x86_64-apple-darwin13.0.0 
Thread model: posix 
...[snipped]... "-traditional-cpp" "-o" "-" "-x" "c" "1.c" 

должны использовать интерфейс cpp, или вы могли бы использовать clang -E вместо этого?

$ clang -E 1.c 
# 1 "1.c" 
# 1 "<built-in>" 1 
# 1 "<built-in>" 3 
# 162 "<built-in>" 3 
# 1 "<command line>" 1 
# 1 "<built-in>" 2 
# 1 "1.c" 2 


onetwo 
+0

Я пытался использовать 'лязг -E file.F90 ', но затем он жалуется следующим образом:' error: invalid value 'f95-cpp-input' in '-x f95-cpp-input''. Я на самом деле готовлю файл fortran. –

+0

Вы должны отредактировать вопрос, чтобы показать это. Кроме того, вы можете установить настоящий gcc через Homebrew или Macports, который по умолчанию не будет принимать -traditional-cpp. – kennytm

+0

'вы можете установить реальный gcc' не вариант –

Смежные вопросы