編譯器能否檢測到語義錯誤?如果不是,何時發現錯誤?語義錯誤
據我所知,語義錯誤是由涉及操作符的操作符數量/類型不正確而導致的表達式錯誤。
例如:
n3=n1*n2;//n1 is integer, n2 is a string, n3 is an integer
上面的語句是語義上不正確。
但是在讀Ç的Primer Plus由斯蒂芬·普拉塔我發現下面的語句
編譯器不會檢測語義錯誤,因爲只要不違反規則Ç。編譯器無法預測你的真實意圖。這讓你找到這些類型的錯誤。一種方法是比較一個程序的功能和你期望的功能。
如果不是編譯器,誰檢測到這些錯誤?
我錯過了什麼嗎?
你的例子不是語義錯誤 - 這是一個語法錯誤。即使字符串* int有效(可能意味着n次重複字符串),類型也不兼容。 – Bevan 2010-05-12 05:38:23
@Bevan,術語有時可以以不同的方式使用,而「語義錯誤」似乎就是其中之一。我肯定會稱這是一個語義錯誤,我絕對不會把它稱爲語法錯誤。 (請看下面我對邁克爾的回答的評論。) – 2010-05-12 06:49:19
@托馬斯 - 我看到(並且承認)你的觀點。我以OP Prata引用的精神使用術語「語義」。 – Bevan 2010-05-12 08:59:31