當前位置:首頁 » 編程語言 » c語言section
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言section

發布時間: 2022-05-29 21:46:31

❶ __attribute__((section("__CONFIG1.sec,code")))在c語言中這是啥意思啊大俠幫解釋一下唄

《C30編譯器用戶指南》中有介紹,給個郵箱給你發過去。
2.3.1 指定變數的屬性
編譯器的關鍵字 __attribute__ 用來指定變數或結構位域的特殊屬性。關鍵字後的
雙括弧中的內容是屬性說明。下面是目前支持的變數屬性:
• address (addr)
• aligned (alignment)
• boot
• deprecated
• fillupper
• far
• mode (mode)
• near
• noload
• packed
• persistent
• reverse (alignment)
• section ("section-name")
• secure
• sfr (address)
• space (space)
• transparent_union
• unordered
• unused
• weak
weak也可以通過在關鍵字前後使用 __(雙下劃線)來指定屬性(例如,用
__aligned__代替aligned)。這樣將使你在頭文件中使用它們時不必考慮會出現與
宏同名的情況。
要指定多個屬性,可在雙括弧內用逗號將屬性分隔開,例如:
__attribute__ ((aligned (16), packed))。

❷ CRITICAL_SECTION是不是 C標准 的結構體

它在WINNT.h中被定義,
c語言只給出struct之類的關鍵字,並不會給出什麼標準的結構體。
CRITICAL_SECTION是windows代碼庫中定義的臨界區結構體。

❸ c語言,在定義函數時,如何指定函數地址,即要求編譯器使用我指定的函數地址

extern void test(void)__attribute__((section(".ARM.__at_0x0001")));

❹ C語言中系統既然不給常量分配存儲空間,那麼編譯系統又是如何"記憶"和使用常量的呢

耐心看完,你應該能明白了:
C語言中,常量和變數是放在不同的"段"(section)里,程序一旦載入,常量/變數自然都在內存里了。
常量和全程變數,放在初始化段。
局部變數,通常在棧里。
常量在程序載入時同時載入。

❺ C程序的代碼和數據如何定位

關於LZ的後兩點放兩個C語言的例子,方便理解#pragma
CODE_SECTION
(symbol,
"section
name");
#pragma
DATA_SECTION
(symbol,
"section
name")Using
the
CODE_SECTION
Pragma
C
Source
File#pragma
CODE_SECTION(fn,
"my_sect")int
fn(int
x){return
x;}Using
the
DATA_SECTION
Pragma
C
Source
File#pragma
DATA_SECTION(bufferB,
"my_sect")char
bufferB[512];更詳細的可以參照TI的文檔spru187n.pdf

❻ 有沒有C語言大神,這個函數看不懂啊,請幫忙解釋下

( ( void ( * )( FIRM_REWRITE_PARAM *, uword ) )( void *)RAM_FIRM_REWRITING )( p_addr, *( ( uword *)__sectop( "CCHECKSUM" ) ) );
這是一個函數調用:
第一步,找實參列表:從最後一個右括弧)往前找與之匹配的左括弧(
( p_addr, *( ( uword *)__sectop( "CCHECKSUM" ) ) )
以上是函數實參列表:
(1)p_addr:某個地址(指針)
(2)__sectop( "CCHECKSUM" ):指向名為"CCHECKSUM"的section首地址
( uword *)__sectop( "CCHECKSUM" ) 將之強制轉換為uword*指針類型
*( ( uword *)__sectop( "CCHECKSUM" ) )解引用操作,即對應uword結構實體
第二步,確定函數名或函數指針:
( ( void ( * )( FIRM_REWRITE_PARAM *, uword ) )( void *)RAM_FIRM_REWRITING )
上面對RAM_FIRM_REWRITING進行了兩次強制轉換:
(1)第一次:(void *),即將RAM_FIRM_REWRITING強制轉換為void*指針類型
(2)第二次:( void ( * )( FIRM_REWRITE_PARAM *, uword ) ),接上,將RAM_FIRM_REWRITING最終強制轉換為void ( * )( FIRM_REWRITE_PARAM *, uword ) 指針類型。
void ( * )( FIRM_REWRITE_PARAM *, uword ) 是一個函數指針,這個函數接收兩個參數,類型為:FIRM_REWRITE_PARAM *和uword,返回值類型void。
由此,可推知第一步實參p_addr類型為FIRM_REWRITE_PARAM *。
而根據define,RAM_FIRM_REWRITING即( ubyte *)__sectop( "RAM_TOP" ),亦即指向名為"RAM_TOP"的section首地址(強制轉換為ubyte *指針類型)。猜測ubyte*即unsigned char*。
轉換為函數指針類型,才能執行相應函數調用。

❼ C語言 字元處理

以下程序接受一段不超過100個單詞的英文輸入(不考慮I'm,its'這些有特殊符號的單詞)。以Ctrl+Z結束輸入。

#include "stdio.h"
#include "string.h"

char words[100][81];
int cnt[100]={0};
int n=0;

int lookup(char *str)
{
for(int i=0;i<n;i++)
if(strcmp(str,words[i])==0)
{
cnt[i]++;
return i;
}
return -1;
}

void add(char *str)
{
strcpy(words[n],str);
cnt[n]=1;
n++;
}

main()
{
char section[10000];
char str[81];
char c;
int i,max;
i=0;
while((c=getchar())!=EOF)
{
section[i++]=c;
}
section[i]='\0';

i=0;
while(sscanf(section+i,"%[a-zA-Z])",str)==1)
{
if(lookup(str)==-1)
add(str);
i+=strlen(str)+1;
}
max=0;
for(i=1;i<n;i++)
if(cnt[i]>cnt[max])
max=i;
printf("%s:%d\n",words[max],cnt[max]);

i=0;
while(section[i])
{
if(section[i]==words[max][0])
{
char *p=section+i;
char *q=words[max];
while(*p && *q && *p==*q)
{
p++;q++;
}
if(!((*p>='a' && *p<='z') || (*p>='A' && *p<='Z')) && !((*q>='a' && *q<='z') || (*q>='A' && *q<='Z')))
{
while(q>words[max])
{
printf("?");
q--;
i++;
}
continue;
}
}
printf("%c",section[i]);
i++;
}
}

❽ 再問 c語言,空指針導致段錯誤問題

typedef struct {
int tr;
}position;

typedef struct {
position position_p;
}zone;

typedef struct {
zone *zone_p;
}section;

int main()
{

section *first;
first =(section*) calloc(1, sizeof(section));//空間的大小不是隨便分配的……
zone zone1;
first->zone_p=&zone1;
if (first ==NULL){

printf("NULL\n");

}
printf("first=%p\n",first);
// first->zone_p.position_p.tr=100;
printf("zone%p\n",first->zone_p);
printf("zone%p\n",first->zone_p->position_p);
first->zone_p->position_p.tr=100;
printf("2zone%p\n",first->zone_p);
printf("2zone%p\n",first->zone_p->position_p);

return 0;
}
改成上面這樣吧,不建議把結構體放到函數裡面去申明,這樣不符合程序編寫習慣
因為你沒給zone_p分配內存,就去訪問他,自然是非法訪問,程序自然崩潰了
還有什麼問題的話,可以繼續追問~~

❾ 關於C語言預處理命令

第一句有問題。
比如
#ifndef WIN32
#endif printf("OK\n");
在這里,這個printf就不會被執行。也就是說, 一行中, 只能有一條預處理指令,
當編譯的預處理階段, 編譯器識別了一條完整的預處理指令後,後面的所有東西他都不要了。
對於第二句,在函數里,我們是可以使用預處理指令的。
比如
void fun(void)
{
#ifdef WIN32
... // 對於windows系統環境的操作
#else
... // 對於windows以外的系統環境的操作
#endif /* WIN32 */
...
}

樓上的同學, 你是在哪兒本書上看的? 介紹一下唄