1. 程式人生 > >Keil MDK不支援結構體對指定元素初始化

Keil MDK不支援結構體對指定元素初始化

結構體對指定元素初始化就是類似下面的操作:

struct test
{
    int a;
    int b;
};

struct test t = 
{
    .a = 1,
    .b = 2
};

這樣就能不按照結構體中的元素順序對結構體進行初始化,這種方式在linux核心程式碼中使用的很多很多,但是在KEIL MDK中使用卻報錯:“expected an expression”。其實就是編譯器不支援C99標準,我們可以開啟C99模式讓編譯器支援C99標準:
這裡寫圖片描述

打開了C99模式之後可能會出現一些錯誤是因為原來的程式碼不符合C99的標準,例如函式返回型別如果是void的話在可以不用寫void,但是C99模式下會報錯,需要加上void才行,再如C99允許在函式中間定義變數,而沒使用C99之前的的C標準是不支援在函式中間定義變數的,只能在函式的最開始定義所有變數,這點上我還是更喜歡C99標準的!!!。

相關推薦

Keil MDK支援結構指定元素初始

結構體對指定元素初始化就是類似下面的操作: struct test { int a; int b; }; struct test t = { .a = 1, .b = 2 }; 這樣就能不按照結構體中的元素順序對結構體

結構(宣告、初始、記憶體齊、如何傳參)

結構基礎知識聚合資料型別能夠同時儲存超過一個的單獨資料。C提供了兩種型別的聚合資料型別,分別是陣列和結構體。陣列是相同元素的集合,它的每個元素是通過下標引用或指標間接訪問的。結構體也是一些值的的集合,這些值稱為它 的成員,但一個結構的成員可能具有不同的型別。陣列元素可以通過下

定義結構變量及初始

style 不想 占用空間 clas 個學生 truct 學生 釋放 ring   雖然已經了解結構體類型,但是結構體類型變量的定義只有一種方法麽,這個當然不是的,所以我把我所知道的幾種方法列出來供給大家參考一下;   首先是第一種,也是我們經常用的一種: 1 #inc

結構和陣列的初始和賦值

{} 這種語法不能用於結構體的賦值,只能用於初始化。例如這樣是錯誤的: struct complex_struct z1; z1 = { 3.0, 4.0 }; 結構體變數之間使用賦值運算子是允許的,用一個結構體變數初始化另一個結構體變數也是允許的; 陣列不

OAI UE結構和執行緒初始

UE結構體和執行緒初始化 UE重要結構圖 UE call stack UE init PHY_VARS_UE * PHY_vars_UE_g[MAX_UE][MAX_NUM_CCs]={NULL}; UE建立三大執行緒    載入USRP硬體 &nbs

結構陣列的指標初始與記憶體釋放

結構體如下: Typedef structstudent { Int num; Char* name; } Tom,*Lily; 如果定義成Tom的形式,不需要為結構體分配記憶體,但是需要對name分配記憶體 Tom.name =(char*)malloc(sizeof(

結構中函式指標初始

/** * 為結構體中的指標陣列賦值 */ #include <stdio.h> typedef struct test { void (*p)(void); void (*q)(void); void (*y)(void); }t

結構的4種初始方式

[objc]  view plain  copy //   //  main.c   //  C語言學習

5. C 結構 陣列的指標 初始 與 記憶體釋放

結構體如下: struct student{ Int num; Char* name; } Tom,*Lily; 1.如果定義成Tom的形式,不需要為結構體分配記憶體,但是需要對name

C語言結構宣告中冒號的使用(佔位符) & C結構的亂序初始

有些資訊在儲存時,並不需要佔用一個完整的位元組, 而只需佔幾個或一個二進位制位。例如在存放一個開關量時,只有0和1 兩種狀態, 用一位二進位即可。為了節省儲存空間,並使處理簡便,C語言又提供了一種資料結構,稱為“位域”或“位段”。所謂“位域”是把一個位元組中的二進位劃分為

淺析C++中結構的定義、初始和引用

#include<iostream>using namespace std; struct Date{        //宣告一個結構體型別Date   int month;      //日期中的月份   int day;        //日期中的天   int year;       //日

KEILMDK 關於C99結構變量初始

get info 設置 png ID col color 結果 htm C99:here 例如聲明了這樣的結構體 void test1() { tt_t t1 ={ .a = 1, .d =

13)結構齊問題

ngs dmi nts min mage ++ image http c語言 詳細可以看 臺式機的 C:\Documents and Settings\Administrator\桌面\C++基礎教程完整版視頻\01_C語言提高\d

結構

str center 但是 內存 read 地址 形式參數 class area 1 C語言裏可以在一個存儲區裏記錄多個相關數字這種存儲區的類型叫結構體類型,這種類型需要首先創建出來然後才能使用 2 結構體類型存儲區裏包含多個子存儲區,每個子存儲區可以記錄一個數字,結構體中

linux中結構齊【轉】

src double 無需 fine types 查看 真理 blog 多個 轉自:https://blog.csdn.net/suifengpiao_2011/article/details/47260085 linux中定義對齊字節 typedef struct

逆向基礎之結構

eof 成員對齊 偏移 str 最大 結構體 基礎 數據 sizeof 遵循以下原則,數據成員對齊;結構體大小;結構體有某些成員大,最大對齊,對齊參數筆結構體的sizeof小,偏移以此為準。struct{ char a;int b;char c;}a 1b,補3b 4bc

結構齊總結

結構體對齊 結構體對齊到底是什麼,看了網上很多的解答,彙總成個人經驗 什麼是結構體對齊 結構體對齊規則 考慮一個問題,為什麼要設計記憶體對齊的處理方式呢? ENDING 結構體對齊到底是什麼,看了網上很多

應用結構二維陣列的大小進行快排

      之前一直不會結構體,今天就簡單的學了一下,對陣列a[n][m]進行從大到小進行排序(n*m<=1e8),輸出座標,由於陣列比較大,用快排進行排序。下面就以簡單的a[3][3]為例。   #include<iostream>

C語言結構齊(記憶體齊問題)

C語言結構體對齊也是老生常談的話題了。基本上是面試題的必考題。內容雖然很基礎,但一不小心就會弄錯。寫出一個struct,然後sizeof,你會不會經常對結果感到奇怪?sizeof的結果往往都比你宣告的變數總長度要大,這是怎麼回事呢?     開始學的時候,

結構齊——結構記憶體佈局

在C語言中,可以通過#pragma pack(n)來指定結構體按n位元組對齊(這裡的n是2的較小整數次冪)。如果程式設計者不指定對齊位元組數,那麼預設的會按照結構體中最長那一項對齊,如在64位作業系統中,當結構體中出現(void *),(long)型別,則必然是按照8位元組對齊;當最大的是int,那麼就按照4