你知道爲什麼下面的代碼無法編譯?命名空間內的extern「C」
#include <iostream>
namespace C {
extern "C" {
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> // open()
#include <unistd.h> // read()
}
}
int main(int argc, char** argv) {
int fd = C::open("./main.cpp", O_RDONLY);
C::read(fd, 0, 0);
return 0;
}
錯誤從GCC 4.4編譯器:
error: ‘read’ is not a member of ‘C’
我不明白你的問題。爲什麼不包括unistd.h? – nmagerko
@JerryCoffin:爲什麼它不會鏈接? –
@Jerry:參見7.5.6:「最多一個具有特定名稱的函數可以具有C語言鏈接。具有相同函數名稱的C語言鏈接的函數 的兩個聲明(忽略限定它的名稱空間名稱) 出現在不同的命名空間範圍中引用同一個函數。對於具有C語言的對象的兩個聲明 命名空間作用域中出現在不同 命名空間作用域中的名稱相同(忽略限定它的命名空間名稱)引用同一個對象。 –