你知道为什么下面的代码无法编译?命名空间内的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语言的对象的两个声明 命名空间作用域中出现在不同 命名空间作用域中的名称相同(忽略限定它的命名空间名称)引用同一个对象。 –