Согласно (c) ANSI ISO / IEC 14882: 2003, стр. 127:
Вложенные спецификации связывания. При вложении спецификаций связи, самое сокровенное определяет язык. Спецификация связи не устанавливает объем. Спецификация связывания должна встречаться только в области пространства имен (3.3). В спецификации связи указанная языковая связь применяется к типам функций всех деклараторов функций, именам функций и именам переменных, введенным объявлением (ями).
extern "C" void f1(void(*pf)(int));
// the name f1 and its function type have C language
// linkage; pf is a pointer to a C function
extern "C" typedef void FUNC();
FUNC f2;
// the name f2 has C++ language linkage and the
// function's type has C language linkage
extern "C" FUNC f3;
// the name of function f3 and the function's type
// have C language linkage
void (*pf2)(FUNC*);
// the name of the variable pf2 has C++ linkage and
// the type of pf2 is pointer to C++ function that
// takes one parameter of type pointer to C function
Что все это означает? Например, какую связь имеет функция f2 ()
, связь с языком C или C ++?
Как указал @Johannes Schaub, в Стандарте нет реального объяснения того, что это означает, поэтому он могут по-разному интерпретироваться в разных компиляторах.
Объясните, пожалуйста, различия в объектном файле:
почему я не могу заставить работать int64? Я компилирую программу с g ++ -x c ++ -o source.c он продолжает начинаться с -2147483648 выше 2147483647 ....
#include <stdint.h>
#include <inttypes.h>
#ifdef __cplusplus
#include <cstdio>
#include <cstdlib>
#include <cstring>
#else
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#endif
int main(int argc, char* argv[])
{
int64_t i;
for(i = 0; i < argc; ++i)
printf("argv[%d]: %s\n", i, argv[i]);
char string [512];
int64_t a1 = atoi((const char*) gets(string));
int64_t limit = a1 + 99999999999
while(a1 <= limit)
{
char command[10000];
sprintf(command, "%d", a1);
FILE* pFile = fopen ("myfile.txt","wa");
fprintf (pFile, "%s\n", command);
fclose (pFile);
a1= a1 + 4321;
}
return EXIT_SUCCESS;
}
c