我需要在大學程式中使用C 98,然而,即使將-std=c 98標志傳遞給clang 或g ,它似乎仍然用c 11編譯,如果我使用c 11的功能,也不會出現錯誤。下面是一個簡單的例子:
#include <string>
#include <sstream>
using namespace std;
int main()
{
int i;
string number = "12";
i = stoi(數字)。
}
我的makefile:
all:
clang -std=c 98 -c *.cpp
clang -o main *.o
清潔。
rm -f *.o main
運行:清理所有
./main
然后我在終端運行make命令(我試著用clang 代替g ,但得到的結果是一樣的),并收到以下輸出:
? cppversion make
g -std=c 98 -c *.cpp
g -o main *.o
? cppversion make
clang -std=c 98 -c *.cpp
clang -o main *.o
? cppversion
我相信如果 -std=c 98 標志起作用,這段代碼就不應該被編譯。我怎樣才能強迫代碼用 c 98 來編譯呢?
這里是 clang 的版本:
Apple clang version 12.0. 5 (clang-1205.0.22.11)
目標:x86_64-apple-darwin20.2.0。
執行緒模型: posix
安裝目錄:/Library/Developer/CommandLineTools/usr/bin
這里是g 的版本:
配置為。--prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/usr/include/c /4.2.1
蘋果clang版本12.0.5(clang-1205.0.22.11)
目標:x86_64-apple-darwin20.2.0。
執行緒模型: posix
安裝目錄:/Library/Developer/CommandLineTools/usr/bin
我還試著添加了標志-pedantic,但它并沒有解決這個問題。
使用標志-stdlib=libc 的結果是:
? cppversion make
clang -stdlib=libstdc -std=c 98 -c *.cpp
clang:警告。include path for libstdc headers not found; pass '-stdlib=libc '/span> on command line to use the libc standard library instead [-Wstdlibcxx-not-found]
main.cpp:1:10: fatal error: 'string'檔案未找到。
#include <string>
^~~~~~~~
1錯誤產生。
使。*** [all] 錯誤1。
如果我把它改成只是-stdlib=libc ,那么它仍然能編譯:
? cppversion make
clang -stdlib=libc -std=c 98 -c *.cpp
clang -o main *.o
? cppversion
我發現了一個簡單的解決方案。使用homebrew安裝gcc并使用g -11來編譯。
CodePudding
嘗試使用-std=c 98 -pedantic。
這應該嚴格執行具體的標準。
這應該嚴格執行具體的標準。
uj5u.com熱心網友回復:
免責宣告:這部分是猜測,因為我沒有Mac
。根據我的理解,clang 是Mac上的默認編譯器,因此如果g 默認使用LLVM:的libc 和頭檔案,我也不會感到驚訝。std::stoi是無條件地在libc 頭檔案中宣告的。
如果你使用g :的libstdc 工具鏈,你將可能得到你想要的錯誤:
clang -stdlib=libstdc -std=c 98 -o main main.cpp
CodePudding
我發現了一個簡單的解決方案。使用homebrew安裝gcc并使用g -11來編譯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314125.html
標籤:
上一篇:請幫助我解決為什么我得到了錯誤?
