由於keil配置了庫函式包,編譯出現錯誤如下:
.\objects\new.axf: error: l6218e: undefined symbol assert_param (referred from stm32f4xx_gpio.o)
原因是keil配置中少個巨集
在stm32f4xx.h中,可以看到
由此可見不配置use_stdperiph_driver無法包含stm32f4xx_conf.h
看到乙個用法
#if defined a|| defined b
/* a或 b被定義,則選擇執行printf1,否則執行printf2 */
printf1
(".....");
#else
printf2
(".....");
#endif
#if !defined a|| !defined b
/* a或 b未被定義,則選擇執行printf1,否則執行printf2 */
printf1
(".....");
#else
printf2
(".....");
#endif
#if defined 和 #if !defined能跟多個巨集定義引數
#ifdef和#ifndef僅能跟乙個巨集定義引數,不能使用表示式
巨集定義及帶引數的巨集定義
include 巨集定義,通常用於定義常量,在 轉換成二進位制檔案時會將 中的巨集名稱替換成值 define 巨集名稱 值 define a 1 帶引數的巨集 fun a,b 為巨集的名稱 a b為巨集的值 帶引數的巨集比函式效率高 define fun a,b a b 為了保證替換結果,最好加入 ...
不帶引數的巨集定義與帶引數的巨集定義
巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯 1.不帶引數的巨集定義 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 格式 define 識別符號 字串其中的識別符號就是所謂的符號常量,也稱為 巨集名 預處理 預編譯 工作也叫做巨集展開 將巨集名替換為字串...
帶引數的巨集定義
不是進行簡單的字串替換,還要進行引數替換。其定義的一般形式為 define 巨集名 參數列 字串 字串中包含在括弧中所指定的引數。如 define s a,b a b area s 3,2 定義矩形面積s,a 和 b 是邊長。在程式中用了s 3,2 把3 2分別代替巨集定義中的形式引數a b,即用 ...