① 為什麼相同的代碼相同的編譯器在不同電腦上的運行結果不同
函數f1中的變數c,你在未初始化的情況下就使用了,就是這句while(c!=0)。這時c的值是不確定的。
② C語言的按照標識符、關鍵字、常用編譯指令有哪些
我們可以在C源程序中插入傳給編譯程序的各中指令,這些指令被稱為預處理器指令,它們擴充了程序設計的環境。現把常用的預處理命令總結如下:
1. 預處理程序
按照ANSI標準的定義,預處理程序應該處理以下指令:
#if #ifdef #ifndef #else #elif
#endif
#define
#undef
#line
#error
#pragma
#include
顯然,上述所有的12個預處理指令都以符號#開始,,每條預處理指令必須獨佔一行。
2. #define
#define指令定義一個標識符和一個串(也就是字元集),在源程序中發現該標識符時,都用該串替換之。這種標識符稱為宏名字,相應的替換稱為宏代換。一般形式如下:
#define macro-name char-sequence
這種語句不用分號結尾。宏名字和串之間可以有多個空白符,但串開始後只能以新行終止。
例如:我們使用LEFT代表1,用RIGHT代表0,我們使用兩個#define指令:
#define LEFT 1
#define RIGHT 0
每當在源程序中遇到LEFT或RIGHT時,編譯程序都用1或0替換。
定義一個宏名字之後,可以在其他宏定義中使用,例如:
#define ONE 1
#define TWO ONE+ONE
#define THREE ONE+TWO
宏代換就是用相關的串替代標識符。因此,如果希望定義一條標准錯誤信息時,可以如下定義:
#define ERROR_MS 「Standard error on input \n」
如果一個串長於一行,可在行尾用反斜線」\」續行,如下:
#define LONG_STRING 「This is a very very long \
String that is used as an example」
3. #error
#error指令強制編譯程序停止編譯,它主要用於程序調試。#error指令的一般形式是:
#error error-message
注意,宏串error-message不用雙引號包圍。遇到#error指令時,錯誤信息被顯示,可能同時還顯示編譯程序作者預先定義的其他內容。
4. #include
程序中的#include指令要求編譯程序讀入另一個源文件。被讀入文件的名字必須用雙引號(「」)或一對尖括弧(<>)包圍,例如:
#include 「stdio.h」
#include <stdio.h>
都使C編譯程序讀入並編譯頭文件以用於I/O系統庫函數。
包含文件中可以包含其他#include指令,稱為嵌套包含。允許的最大嵌套深度隨編譯器而變。
文件名被雙括弧或尖括弧包圍決定了對指定文件的搜索方式。文件名被尖括弧包圍時,搜索按編譯程序作者的定義進行,一般用於搜索某些專門放置包含文件的特殊目錄。當文件名被雙括弧包圍時,搜索按編譯程序實時的規定進行,一般搜索當前目錄。如未發現,再按尖括弧包圍時的辦法重新搜索一次。
通常,絕大多數程序員使用尖括弧包圍標準的頭文件,雙引號用於包圍與當前程序相關的文件名。
5. 條件編譯指令
若干編譯指令允許程序員有選擇的編譯程序源代碼的不同部分,這種過程稱為條件編譯。
5.1#if、#else、#elif #endif
條件編譯指令中最常用的或許是#if,#else,#elif和#endif。這些指令允許程序員根據常數表達式的結果有條件的包圍部分代碼。
#if的一般形式是:
#if constant-expression
Statement sequence
#endif
如#if後的常數表達式為真,則#if和#endif中間的代碼被編譯,否則忽略該代碼段。#endif標記#if塊的結束。
#else指令的作用與C語言的else相似,#if指令失敗時它可以作為備選指令。例如:
#include <stdio.h>
#define MAX 100
Int main(void)
{
#if MAX>99
printf(「Compiled for array greater than 99.\n」);
#else
printf(「Complied for small array.\n」);
#endif
return 0;
}
③ 一選擇題:處理器A每秒處理的指令時處理器B的2倍。
D。
原因:處理器A每秒處理的指令是處理器B的2倍;某一特定程序P分別編譯為處理器A和處理器B的指令,編譯結果處理器A的指令數是處理器B的4倍(例如處理器A的指令數是40條,而處理器B的指令數是10條),已知程序P在處理器A上執行需要1個小時,那很顯然處理器B需要半個小時。
處理器(CPU,Central Processing Unit)是一塊超大規模的集成電路,是一台計算機的運算核心(Core)和控制核心( Control Unit)。它的功能主要是解釋計算機指令以及處理計算機軟體中的數據。
處理器主要包括運算器(算術邏輯運算單元,ALU,Arithmetic Logic Unit)和高速緩沖存儲器(Cache)及實現它們之間聯系的數據(Data)、控制及狀態的匯流排(Bus)。它與內部存儲器(Memory)和輸入/輸出(I/O)設備合稱為電子計算機三大核心部件。
④ C語言同一段代碼,同樣的文件,編譯器為什麼運行結果不一樣
一般來說,C語言程序被編譯為可執行程序後,每次都輸出都是相同的,但有些特殊情況例外,比如,代碼中引入了隨機變數,並讓它出現在輸出結果中。
⑤ 相同的源代碼和編譯環境,編譯出來的可執行文件完全一致嗎
不一定會一模一樣,這還跟你的操作系統的環境配置有關。
⑥ 指令和代碼相同嗎
指令,其實是對CPU而言的。CPU每次從內存取出一個指令,內容是0和1組成的二進制數據。非常不易於辨認。人要想直接用01這樣的機器代碼(請注意,指令是代碼)來編程,那麼幾乎是不可能的事。
於是人們發明了匯編語言。用一些符號來表示特定的指令機器碼。這些符號寫好之後,最後由編譯器翻譯成機器代碼。因匯編語言的指令符號幾乎和指令機器碼一一對應,所以,匯編代碼可以看做是指令(一組指令)。
然而,更高級的語言,c++等,顯然就不是指令了。它已經很接近人類自然語言。
所以,指令是代碼,而且分為機器碼 或者是 助記符代碼 ,然而,代碼卻不是指令。「代碼」是一個通用詞語。
⑦ 相同的代碼,不同編譯器下結果不同,究竟哪個是正確的
我覺得可能與代碼有關系,不同編譯器不同的編譯模式是存在差異的,包括浮點運算,代碼優化方面是有不同
⑧ 相同的c語言代碼,在不同的編譯器,不同的操作系統上面生成的指令是不是不同的
不同的CPU生成的指令不一樣、不同的編譯器C語言實現方式不一樣、不同的操作系統API不一樣。使用C語言只能做到源代碼級別的跨平台和跨編譯器。
⑨ 源代碼行數與源指令數的關系
朋友,我的理解是多數情況下源代碼數多於源指令數,但也不一定。
為何呢?因為源代碼需要被翻譯成obj文件,再被link,最後輸出exe文件被執行,這個過程中,一些源代碼,比如偽代碼是編譯器識別的,不會被翻譯成處理器可識別的指令,因而代碼數大於指令數。
然而,另一種情況,比如一條偽代碼可能會翻譯成指令,並且需要好幾條指令去執行,這樣翻譯過後,指令數反而會比代碼數更多。
如果只是把你寫的代碼稱為源的話,那應該是源代碼行數》=源指令數了 呵呵
不知是否正確,望其他網友指正。
⑩ 相同的二進制數在不同的程序中代表的指令相同嗎
所有的程序首先會被編譯成匯編語言,然後變成二進制數表示的機器語言,因而所有的編程對象,在執行指令時,都是二進制數(不存在什麼八進制、十六進制)