2013-05-09 3 views
0

У меня есть сильфонных программы испытанийПоведение статического ключевого слова в инлайн функции

#include<stdio.h> 
inline int func() 
{ 
static int a = 10; 
a++; 
return a; 
} 

int main() 
{ 
int x,y,z; 
x=func(); 
printf("x is %d\n",x); 
y=func(); 
printf("y is %d\n",y); 
z=func(); 
printf("z is %d\n",z); 

return 0; 
} 

Когда я бегу я получаю оп, как

x is 11 
y is 12 
z is 13 

Как встроенная функция означает программист просил компилятор вставить полный орган функции в каждом месте, где функция называется, вместо генерации кода для вызова функции в одном месте определяется

Так не о/р должен быть

x is 11 
y is 11 
z is 11 

ответ

3

Ваша идея inline ключевого слова не совсем правильно. Поскольку C99 inline просто сообщает компилятору, что он не обязательно должен испускать код для функции в компиляторе, который ее видит. Он позволяет избежать ошибок «с несколькими определенными символами» посредством связывания.

На ваш вопрос: static объявлений внутри inline Функции: C99 просто запрещает их. Таким образом, ваша проблема не возникает с соответствующим кодом.

Вы можете быть заинтересованы в некоторых чтение о inline and C99

Кроме того, некоторые придираться, функциональные объявления для функций, которые не получают параметры должны использовать void в списке объявлений. Объявления с () относятся к функциям с произвольным количеством параметров.

2

Помещение inline на функцию не должно изменять семантику сгенерированного кода.

C draft standard имеет это сказать;

Инлайн де определение функции с внешним связыванием должен не содержит де определения в виде Моди фи умелым объекта со статической или хранениями нити продолжительностью, и не должен содержать ссылку к идентифицируемому эр с внутренней связью.

Другими словами, если встраиваемая функция распределяется между единицами перевода, компилятор не позволит встраивание методов со ссылками на статические переменные, и если это локальная к единице перевода, компилятор знает о каждом создании экземпляра встроенного и легко создать один и только один экземпляр статического.

Смежные вопросы