名称空间中的extern“C”

时间:2011-11-11 03:13:22

标签: 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’

1 个答案:

答案 0 :(得分:5)

您无法将所有内容注入标题下的命名空间。在这种情况下,read是一个宏,在命名空间解析规则生效之前,它会被评估为其他内容。