A. C語言中對於變數要分配內存,那麼對於宏定義,常量等要嗎如果不要它們是存放在哪裡的
常量在常量區,也就是堆中,屬於進程空間
B. c語言多個文件都用到同一個宏和結構,那麼宏定義和結構定義應該放在哪個文件合適呢
宏定義又稱為宏替換,c語言中的宏定義只是簡單的字元串替換而已。
比如
define
n
1000
在程序中遇到n就自動把n替換成1000,n不是一個變數,不能賦值。
如果你寫n=1;
相當於寫1000=1;
這編譯是通不過的,所以你使n的值改變是做不到的。
n只是一個要被替換的記號而已,連變數也不是。
C. c語言宏定義的 錯誤返回值 如何保存到數組buf[100]中
程序代碼: #include <stdio.h> #include <string.h> //包含memset函數 #include <stdlib.h> //包含double atof(const char *nptr); #define MAX_LEN 260 #ifndef _MSC_VER #define bool int #d
D. C語言中的宏是否會分配會分配存儲空間O(∩_∩)O謝謝
呃,不會.也去不出地址.
宏是"預處理",意思就是說,在編譯之前,宏已經不存在了...
比如 #define COUNT (10)
int a = COUNT;
可以這么說,其實在編譯的時候,編譯器看到的是int a = 10;
E. 單片機用C語言編寫的程序說定義的數據都存放在哪了 向下面的一段定義的「U" 和「r」
num 放RAM中;
table[]放在ROM中
u,r 就是代表unsigned int,unsigned char意思,不佔空間
F. c語言編譯生成的.obj文件解釋下
c語言編譯生成的.obj文件是一種文本文件,程序編譯時生成的中間代碼文件目標文件,一般是程序編譯後的二進制文件,再通過鏈接器和資源文件鏈接就成可執行文件了。OBJ只給出了程序的相對地址,而可執行文件是絕對地址。
obj文件基本結構:OBJ文件不需要任何種文件頭(File Header),盡管經常使用幾行文件信息的注釋作為文件的開頭。
OBJ文件由一行行文本組成,注釋行以符號「#」為開頭,空格和空行可以隨意加到文件中以增加文件的可讀性。有字的行都由一兩個標記字母也就是關鍵字(Keyword)開頭,關鍵字可以說明這一行是什麼樣的數據。
(6)c語言宏編譯後的存放擴展閱讀:
C編譯的整個過程很復雜,大致可以分為以下階段:
1、預處理階段
在該階段主要完成對源代碼的預處理工作,主要包括對宏定義指令,頭文件包含指令,預定義指令和特殊字元的處理,如對宏定義的替換以及文件頭中所包含的文件中預定義代碼的替換等,總之這步主要完成一些替換工作,輸出是同源文件含義相同但內容不同的文件。
2、編譯、優化階段
編譯就是將第一階段處理得到的文件通過詞法語法分析等轉換為匯編語言。優化包括對中間代碼的優化,如刪除公共表達式,循環優化等;和對目標代碼的生成進行的優化,如如何充分利用機器的寄存器存放有關變數的值,以減少內存訪問次數。
3、匯編階段
將匯編語言翻譯成機器指令。