LINUX.ORG.RU

Сообщения ama1185

 

Стандарт С++ гарантирует, что приведенный ниже код рабочий?

Форум — Development
#include <stdio.h>

struct Foo {
  Foo() {
    printf("ctor\n");
  }
  Foo(const Foo &) {
    printf("copy ctor\n");
  }
  ~Foo() {
    printf("dctor\n");
  }

  void call() const {
    printf("cal\n");
  }
};

Foo return_local_object_1() {
  Foo foo;
  return foo;
}

Foo return_local_object_2() {
  return return_local_object_1();
}

int main(int argc, char* argv[]) {
  const Foo &foo = return_local_object_2();
  foo.call();
}

И будет ли хоть раз скопирован объект foo? Код компилируется, запускается, но в стандарте не могу найти секцию, которая описывает это поведение. Если вы хорошо знакомы со стандартом, не могли бы сказать параграф, где это описано?

Спасибо.

ama1185
()

Где искать исходники стандартной библиотеки C++?

Форум — Development

Хочу почитать исходники стандартной библиотеки С++ (стримы), но не могу найти где взять исходники: в своей системе не нашел (искал /usr/src/, /usr/local/src/), гуглил «linux c++ standart library sources», не помогает... Подскажите пожалуйста.

Работаю на Ubuntu 9.10.

ama1185
()

Программа С++ не линкуется с сишными либами :(

Форум — Development

Есть две библиотеки «С» lib1, lib2. lib2 использует функции lib1. Есть программа на С++. В ней используются функции lib2.

Структура директорий:

$ tree
.
|-- lib1
|   |-- lib1.c
|   `-- lib1.h
|-- lib1.a
|-- lib1.o
|-- lib2
|   |-- lib2.c
|   `-- lib2.h
|-- lib2.a
|-- lib2.o
`-- prog
    `-- main.cpp

lib1.h

void lib1_print(const char *szWhat);

lib1.c

#include <stdio.h>

void lib1_print(const char *szWhat)
{
	printf(szWhat);
}

lib2.h

void lib2_print(const char *szWhat);

lib2.c

#include "../lib1/lib1.h"

void lib2_print(const char *szWhat)
{
	lib1_print(szWhat);
}

main.cpp

extern "C"
{
#include "../lib2/lib2.h"
}

int main()
{
	lib2_print("hello");
}

Компилирую:

$ gcc -c lib1/lib1.c -o lib1.o && ar -r lib1.a lib1.o
lib1/lib1.c: In function ‘lib1_print’:
lib1/lib1.c:5: warning: format not a string literal and no format arguments
$ gcc -c lib2/lib2.c -o lib2.o && ar -r lib2.a lib2.o
$ g++ -o out prog/main.cpp -l1 -l2 -L./
.//lib2.a(lib2.o): In function `lib2_print':
lib2.c:(.text+0xd): undefined reference to `lib1_print'
collect2: ld returned 1 exit status

Кто знает, в чем проблема?

ama1185
()

RSS подписка на новые темы