『壹』 怎樣讓C語言編寫的程序在C++編譯器中實現
C++完全兼容C,所以,C的程序在VC++6裡面照樣可以執行。我一直就是這么做的,放心好了。
『貳』 第一個C語言編譯器是怎樣編寫的
任何一個功能
任何一個語言 都能實現
所以 關鍵的不在於語言 而在於 演算法
C語言被人設計出來
設計了它的語法和規則
然後 根據這個規則,用B語言(Ken Thompson發明的B語言,而 B語言則源自BCPL語言。) 加匯編 編寫了第一個C的編譯器
沒用多久
因為C語言更好用
於是 後續的C語言編譯器 都是C語言自己寫的了。
『叄』 第一個 C 語言編譯器是用什麼語言編寫的
參考 Dennis M. Ritchie 寫的 The Development of the C Language:Chistory,C 語言誕生的基本過程就是 Ken Thomson 不滿意 BCPL,於是設計了 B 語言,並且用 BCPL 為 B 語言寫了一個編譯器,然後從這個編譯器開始自舉寫新的 B 語言編譯器。貝爾實驗室的眾人在 PDP-7 上用 B 語言寫了各種各樣的東西後又不滿意 B 語言了,於是 1971 年 DMR 開始在新買的 PDP-11 上用 B 給 B 寫擴展,稱之為 NB (new B,此處省略吐槽若干),擴展著擴展著離 B 的畫風越來越遠了,就取了一個新名字變成了一門新語言—— C 語言。 1973 年夏天他們用手頭的編譯器和語言給 PDP-11 重寫了一個 Unix Kernel。C 語言大約就是這個時期成型的。
所以,可以說第一個 C 語言的編譯器是用 B 語言,或者說是擴展過的 B 語言(NB)寫的。因為是一邊改進語言一邊用改進了的編譯器這樣滾雪球寫出來的,也可以看成是 C 語言寫的?畢竟 很難確定什麼時候 C 自己變成了一門新語言……
『肆』 如何實現 C 語言編譯器
匯編編譯器:把匯編語言源程序轉換為機器語言的程序,匯編編譯器也可以生成源代碼列表文件,其中包括行號,內存地址,源代碼語句,程序中使用的符號及變數,交叉引用列表.
在Windows/Dos 下可用的匯編編譯器有Microsoft宏匯編編譯器MASM,Borland Turbo Assember(TASM)和The NetWide Assembler(NASM),其中NASM是跨平台的編譯器可用於Windows/Dos/linux下.他們的語法相近,都是Intel語法風格. 在Linux下可用的匯編編譯器有NASM,gas.NASM和gas的語法風格相去甚遠,NASM使用的是Intel 語法風格的匯編語法,而gas使用的是AT&T的匯編語法風格.
『伍』 如何自己實現一個類C腳本語言編譯器
這個你就要學編譯原理了,當你了解了編譯原理,自然也就能寫一個類C腳本語言編輯器
只要你原理明白了可以用任何技術實現,我上學時,有用java實現的 有用HTML5+JS實現的 有用C#實現的
總得來說你得學編譯原理,把詞法分析 語法分析 3元組轉換這些搞清楚。
『陸』 如何用java調用c語言編譯器實現在線編譯c語
要在java中調用c語言的庫,需要使用Java提供了JNI。
舉例說明
在c語言中定義一個 void sayHello()函數(列印Hello World);然後在Java中調用這個函數顯示Hello Word.
現在分別從Java和C語言兩部分說明:
1. Java 部分
首先定義一個HelloNative,在其中申明sayHello函數,函數要申明為Native 類型的.如下:
public class HelloNative {
public native void sayHello();
}
編譯這個類,生成class文件:
javac HelloWorld.java
利用javah生成需要的h文件
javah HelloNative
生成的 h文件大概如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
可以看一下上面自動生成的程序,程序include了jni.h,這個頭文件在 $JAVA_HOME下的include文件夾下. 還可以發現生成的函數名是在之前的函數名前面加上了Java_HelloNative。
2. C語言部分
根據上面生成的h文件編寫相應的代碼實現,建立一個 HelloNative.cpp用來實現顯示Hello World的函數.如下:
#include <stdio.h>
#include "HelloNative.h"
JNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)
{
printf("Hello World!\n");
}
代碼編寫完成之後,我們再用gcc編譯成庫文件,命令如下;
gcc -fPIC -I/usr/lib/jvm/java-7-openjdk-i386/include -I/usr/lib/jvm/java-7-openjdk-i386/include/linux -shared -o libHelloNative.so HelloNative.cpp
這樣就會在當前目錄下生成一個libHelloNative.so的庫文件.這時需要的庫已經生成,在C語言下的工作已經完成了.
接下來需要在Java中編寫一個程序測試一下.在程序前,需要將我們的庫載入進去.載入的方法是調用Java的 System.loadLibrary("HelloNative");
public class TestNative
{
static {
try {
System.loadLibrary("HelloNative");
}
catch(UnsatisfiedLinkError e) {
System.out.println( "Cannot load hello library:\n " + e.toString() );
}
}
public static void main(String[] args) {
HelloNative test = new HelloNative();
test.sayHello();
}
}
但是再編譯後,運行的時候,問題又出現了.
Cannot load hello library:
java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V
at HelloNative.sayHello(Native Method)
at TestNative.main(TestNative.java:13)
載入庫失敗,但是庫明明就是放在當前文件夾下的,怎麼會載入失敗呢?
用System.getProperty("java.library.path")查看,發現java.library.path中並不u存在當前的目錄.主要有以下的幾個解決辦法:
1) 將生成的庫復制到java.library.path有的路徑中去,當然這樣不是很好
2) 設置環境變數export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ,將當前的目錄加入到LD_LIBRARY_PATH中
3) 設置java 的選項,將當前的目錄加入到其中 .java -Djava.library.path=. $LD_LIBRARY_PATH
這樣之後程序就能夠成功的運行了.可以看見顯示的"Hello World!"了
『柒』 C或者C++轉mips怎麼用編譯器實現謝謝!
去查編譯器的幫助文檔或者數據手冊,這里涉及到C語言和匯編語言的相互調用問題,一般編譯器都會有相關說明的,但不同編譯器的調用約定或許不同
『捌』 怎樣去寫一個編譯器(用C語言寫C語言編譯器),需
這個需要考慮到很多的問題 各種錯誤的類型 以及可能出現的情況
這個可以先去看看c編譯器的原理(最好是源代碼) 然後可以自己試著 編寫其中一部分實現的原理 如果是簡單的查錯 也要分析錯誤的類型等 修正方法
『玖』 能實現輸入函數的C/C++在線編譯器
我認為目前最好用的在線編譯器; http://www.mcqyy.com/RunCode/cpp/