2016-02-01 125 views
5

我在編譯過程中收到以下錯誤:錯誤:「ASM」未聲明(在一次使用此功能)

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

在宏調用的頭文件如下:

EXCHANGE(s, *(a)); 

和宏的實際確定指標如下:

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

宏調用和定義在相同HEA存在der文件。 怎麼回事?

我使用cmake來構建項目和CFLAGS如下:

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

不使用你嘗試使用'-E'預處理後停止編譯? – Aif

+0

什麼是-E,我該如何使用它?我正在通過cmake構建我的項目。 –

+2

編譯器是否支持'asm'關鍵字。順便說一句你使用哪種編譯器/環境/ IDE/OS? –

回答

6

您與選項-std=c99編譯。

這將禁用一些非標準GCC擴展,如asm功能。

請參閱https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#index-std-112瞭解一些(非常精確)的文檔。

如果需要內聯彙編,請從cmakefile中刪除或更改行set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")

+0

這不是一個答案而是一個評論。 –

+0

nope。沒有'-ansi'標誌。 –

+0

整潔,這就是當我問編譯標誌時發現的。很高興我們找到了。 – Aif

相關問題