2016-02-01 23 views
5

sto ottenendo il seguente errore durante la compilazione:errore: 'Asm' sommerso (primo utilizzo in questa funzione)

error: ‘asm’ undeclared (first use in this function) 
EXCHANGE(s, *(a)); 
^ 

in un file di intestazione in cui la macro viene richiamato come segue:

EXCHANGE(s, *(a)); 

e la defintion effettivo della macro è la seguente:

#define EXCHANGE(R,M) asm volatile ("xchg %1, %0" : "+m" (M), "+r" (R)) 

macro invocazione e definizione esiste nel medesimo hea der file. Cosa non va?

Sto usando CMAKE per costruire il progetto e CFLAGS sono i seguenti:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-braces") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-field-initializers") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat=2") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wswitch-default") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith") 
#-Wno-deprecated-declarations to suppress the deprecation errors with newer version of JSON-C 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations") 
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wbad-function-cast") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wstrict-overflow=5") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Winline") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wundef") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wnested-externs") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-cast-qual") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wshadow") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunreachable-code") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wfloat-equal") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wstrict-aliasing=2") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wold-style-definition") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") 

#set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -O0 -g3 -ggdb") 
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -O3") 
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -E") 
+1

hai cercato di fermare la compilazione dopo il pre-processing usando '-E'? – Aif

+0

Cos'è -E e come posso usarlo? Sto costruendo il mio progetto tramite cmake. –

+2

È la parola chiave 'asm' supportata dal compilatore. BTW quale compilatore/ambiente/IDE/OS stai usando? –

risposta

6

Si compila con l'opzione -std=c99.

Disabilita alcune estensioni GCC non standard come la funzione asm.

Vedere https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#index-std-112 per alcuni (non molto preciso) documentazione.

Rimuovere o modificare la linea set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") dal cmakefile se è necessario il montaggio in linea.

+0

Questo è piuttosto un commento che una risposta. –

+0

no. Nessuna bandiera '-ansi'. –

+0

Neat, è quello che ho scoperto quando ho chiesto il flag di compilazione. Sono contento di averlo trovato. – Aif